CF Round #889 订正

AcO2d / 2023-08-01 / 原文

C. Dual

\(\bf \sf ez\ ver.\)

比较简单,首先不递减数组的差分数组必定是非负自然数构成的,所以我们只要全部变成正或负的,前后做一次前缀和即可。

全变成正或负,找到最大绝对值的数,对所有异号元素进行操作,理论最多次数为 \(2(n-1)=38\) 次。

\(^*\bf \sf hd\ ver.\)

我们发现异号元素可能远远大于同号元素,是否能颠倒符号。

题目中给的 \(0\le |a_i| \le 20\),我们发现尽管是 \(1\)\(-20\) 这种计算数据,只要把 \(1\) 倍增 \(\ge5\) 次就能 \(> 20\)

现在分析一下最优次数:令同号个数为 \(a\),异号个数为 \(b\),且令 \(a+b=20\)

  • \(b \le 12\) 时,次数为 \(b + 19\le 31\),可以通过。
  • \(b > 12\) 时,则 \(a< 8\),次数为 \(5 + a + 19 < 32\),可以通过。

D. Earn or Unlock

把解锁代价均分到每一个牌中,则每一个前缀的代价可以提前算出,现在只要知道每个前缀是否能解锁。

然后 bitset 优化背包即可,时间复杂度 \(\mathcal O(\dfrac{n^2}{w})\),注意转移之后要去掉扔掉的牌。

*E. Expected Destruction

*F. Michael and Hotel