@Cyani
2021-03-02T07:43:26.000000Z
字数 926
阅读 875
OI
https://www.cnblogs.com/yuanquming/p/11508861.html
E 题
https://www.cnblogs.com/penth/p/10263903.html
注: 以上两题均选自 AtCoder CODE FESTIVAL, 该系列比赛的题目质量较高,有兴趣的同学可以尝试去多做做.
建议参考官方题解.
问题需要求的是 “最大值最小”,可以想到二分答案 ,变成判定性问题。
XOR 运算的每一位是独立的,由此我们先独立地考虑每一位。假设第 位有 个数为 ,那么 变成限制所有 的奇偶性。
设 为 的第 位(如果 或 是奇数先特判),可以发现 是一组合法的初始解。同时,所有的解可以通过不断操作 「 减二, 加四」来得到。
加下来的方向可能也只有按数位从高到低 DP 了。有了 的限制之后,我们让状态的第二维为「当前有多少个 未卡到 的上界」,称其为 “自由位”。设 为:当前考虑第 位,有 个 卡到上界,最少需要多少进位(也即当前位操作数量)。可以做到关于 和 的多项式复杂度。
考虑缩小 的状态数量。一个重要的性质是,如果「当前 是 ,自由位的数量至少为 ,同时不需要进位」,那么 一定可行。这是因为 的初始解 ,一旦有 个数成为自由位,可以令后面的其他位都是 ,由这 个数字自由调整。
设之前退下来的位加上当前的初始解为 ,也即当前位需要的 的个数(可以继续往后退)。如果当前 为 ,那么只能继续往后退。接下来,如果 并且 ,直接返回 true
(由前一段所述)。否则继续枚举 ,表示新的自由位个数。继续观察可以发现一个更重要的性质:当 的时候,如果 显然是更不优的(由于奇偶性的限制, 到 的转移是必要的),当 足够大的时候,我们最优化的目标只有 需要的进位最少。
所以需要考虑的 的上界只有 ... 由此我们得到了一个 的做法。