当前位置: 首页 > news >正文

DMY集训记录

7.21 Day1 贪心构造交互思维

第一天上来就吃*,没绷住

T1:Minimum OR Path

题意:一个长度为 \(n\) 的数组 \(a\) ,在位置 \(i\) 时可以移动到 \(j\) (\(j \in [i,i+a_i]\)),现在从 \(1\) 移动到 \(n\) ,一条路径的代价为经过的位置的 \(a\) 值按位或,求最小代价。

题解:对于这种位运算的题目,首先想到拆位,这道题求最小值,从高位向低位考虑,因为在钦定不选高位的情况下无法到达那就必须得选,否则一定可以不选。

T2:Another Array Problem

题意:一个长度为 \(n\) 的数组,每次操作选择两端点 \(i,j (i<j)\)\(a_{[i,j]}\) 替换为 \(|a_i-a_j|\),求在任意次操作后数组求和的最大值。

题解:挺有意思的,类似构造,有一个组合构造,对同一个区间操作两次后,会得到一段 \(0\) ,这个时候可以直接赋值,所以 \(n \ge 4\) 时整个数组可以赋成最大值,而 \(n \le 3\) 时情况少得可怜,直接取 \(max\) 即可。

T3:Make it Zero

题意:有一个长度为 \(n\) 的数组 \(a\) ,每次操作要求选定一个长度为 \(n\) 的数组 \(b\) ,要求数组存在一个 \(i\)\(b_{1...i}\) 的前缀和和 \(b_{i+1...n}\) 的后缀和相等,然后 \(a_i = a_i - b_i\) 最终要求将 \(a\) 数组全部变成 \(0\) 。(限制最多17次操作)

题解:比较简单的构造。首先考虑一下无解,每次减去的 \(b\) 数组总和为偶数,所以若原数组 \(a\) 总和为奇数则无解,同时若有一个数大于 \(\frac{sum}{2}\) 同样无解(显然无法配合)。至于剩下的构造很简单,次数其实最多为 \(2\) :显然有 \(1\) 就能构造好的,否则先找到一个最靠右的分界点满足前缀和小于 \(\frac{sum}{2}\) 此时后面剩的总和仍然是个偶数,显然的是此时的分界点刚好可以取到剩余量的一半,剩下的在后面拼凑即可。

http://www.wuyegushi.com/news/90.html

相关文章:

  • Idea 构建 jar包
  • 2025 暑期模拟赛题目选记
  • 7月26日随笔
  • Learn Learn IdaPython
  • 启发式算法解析:经典思想、代表人物与前沿融合
  • day25
  • 线段树 tricks
  • 第一章
  • CVE-2022-41678 后台代码执行漏洞 (复现)
  • 无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测完美实现
  • Memory Systems_ Cache, DRAM, Disk (2010)-学习笔记2-Caches, ‘Caches,’ and “Caches”
  • JAVA语言学习总结(第25天)
  • hot 100二叉树算法
  • 信号处理__FFT变换
  • LCD显示信号波形
  • 7/26
  • 7.26
  • 盛最多水的容器
  • 练习cf939A. Love Triangle
  • CVE-2023-46604 Apache ActiveMQ 远程代码执行漏洞 (复现)
  • Day26
  • 假期学习
  • 第二十四天
  • 在python虚拟环境中遇到 ​​No module named pip​​ 错误解决方案
  • 从零开始的web前端学习-React
  • tinymce富文本编辑器使用
  • 微软C语言编译器‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead
  • Java学习Day26
  • 线性基(个人学习笔记)
  • 花菖蒲 2025.7.26 模拟赛题解