LOADING

正在加载,请稍候

D.Birthday Gift

Problem 1946D - Birthday Gift

分析

对于区间位运算,比较自然的做法是按位拆分,并从高位到低位分析 xx 的每一位。

  1. 如果第 ii 位为 00,并且数组中这一位为 11 的元素个数为奇数,那么无论如何分段,都会有一段的异或结果在这一位为 11,从而导致整体大于 xx

  2. 如果第 ii 位为 00,并且这一位为 11 的元素个数为偶数,则需要尽量就近两两合并,保证这一位异或为 00,同时让分组数量尽可能多。

  3. 如果第 ii 位为 11,并且这一位为 11 的元素个数为奇数,则当前位不需要强制处理,可以继续向低位传递。

  4. 如果第 ii 位为 11,并且这一位为 11 的元素个数为偶数,则两两合并可以保证这一位异或为 00,并得到一个候选答案;但不合并也可能在低位获得更多分组,所以也要把“不处理”的情况继续向后传递。

由于第 4 种情况里会保留与 xx 当前前缀相等的状态,可以考虑对 xx 加一后再处理,这样在传递到低位时能统一处理边界。