CF1923 挂分记
CF1923
A
弱智题,算一下最后一个 \(1\) 和第一个 \(1\) 之间有多少个 \(0\) 就可以了。
B
只需要判断对于每一个距离,在这个距离内的所有血量和是否 \(\le k \times\) 距离即可。
C
分两类讨论:
- 长度为 \(1\),绝对不行;
- 否则 令所有非 \(1\) 的为 \(1\),若剩下的和可以使每一个 \(1\) 都变成 \(2\) 或以上,就可以了。
D
考虑当前的是被左边的吃掉还是右边的吃掉。假设它被左边吃掉。
如果左边那个比它大,\(1\) 步即可。否则令 \(p_i\) 表示 \(i\) 左边第一个和 \(i\) 不同的坐标,没有则为 \(0\)。
令 \(s_i\) 为 \(\sum_{j=1}^ia_j\),则区间 \([j, i - 1]\) 能吃掉 \(i\) 的条件是:
- \(j \le p_{i - 1}\);
- \(s_{i - 1} - s_{j - 1} \gt a_i\)。
对于第二个条件,可以转化为 \(s_{j - 1} \lt s_{i - 1} - a_i\)。因为 \(j\) 需要尽量大,也就是说 \(j\) 需要满足 \(s_j \ge s_{i - 1} - a_i\),二分即可。
E
不会树 /kk/kk
F
可以发现 shrink 顶多两次。
如果不 shrink,那就尽量把前面的空出来。
如果 shrink 一次,那就把后面尽量空出来。
如果 shrink 两次,双指针维护能达到的区间 \(l, r\),再二分(?)一下判断最后几个数是全 \(1\) 的。
赛时 \(1:58\) 想出来的,没写 /kk


浙公网安备 33010602011771号