Loading

CF2119E And Constraint

学到了一些东西。

首先考虑到 \(b_i\) 的二进制位一定包含了 \(a_{i - 1} | a_i\) 的二进制位,我们不妨求一个 \(p_i\) 表示将 \(b_i\) 最少加多少可以满足这个条件的数。

但是我们发现可能存在一些的与的数比 \(a_i\) 大,我们还需要通过一些操作将 \(b_i\) 某些位置的 \(1\) 给干掉。

有个二进制题经典结论是:

  • 当我通过加一些 \(1\) 使得目前的 \(p_i\) 中原本有一位是 \(0\) 的地方变成 \(1\),那没比它位低的可以任意排布。

我们枚举到底哪个地方变成了 \(1\)比它低的位肯定能变成 \(0\) 就变成 \(0\),否则肯定存在一种方案将它更低的位变成 \(1\),且这样一定不劣,通俗来说,我们最后可能的 \(p_i\) 只会有位数种。

然后 DP 即可啦。

posted @ 2025-11-10 17:24  Alexande  阅读(5)  评论(0)    收藏  举报