本人初三,第一次给牛客比赛写题解,轻喷。 因为先开了B以37秒的差距痛失rk1。 代码给的都是考场代码,可能比较丑。(有些后加的注释) upd:D题证明补了一下。 A. A|B 考虑 和 的某一个二进制位 ,只有在两个都是 的情况下满足 。 所以不存在一位使得 和 那一位都是 (不然和会大于 or)。 考虑从高位到低位依次填 ,可以发现如果这一位 是 就一定要填 ,如果这一位 是 且目前填的前缀和 相等,那么也一定要填 (不然 就会 )。 所以令 表示填到了第 位, 的前 位与 的前 位是否相等,的方案数。 转移的时候从高位到低位枚举 ,把这一位填 的情况分别转...