题解 CF2180E No Effect XOR
题解 CF2180E No Effect XOR
其他题
题意
给定
数据范围:多测,
做法
题解不太像人。这里讲讲按位考虑的做法。(upd:题解更按位考虑版了,虽然我没看。)
首先显然在
然后我们假设
- 如果放
0 的话,则第k 位不变,此时要求[l,2^k) 和[2^k,r] 分别是封闭的。- 对于
[2^k,r] ,我们同时减掉2^k 就得到[0,r-2^k] ,明显只有r-2^k 中末尾连续的1 是符合题意的,其他部分一旦异或1 均会跑到区间外面去。 - 对于
[l,2^k) ,根据异或的逆运算也是异或,我们发现异或x 前后的数是一一对应的。所以[l,2^k) 内封闭就等价于[0,l) 内封闭。然后求法就同上。
- 对于
- 如果放
1 的话,则第k 位反转,此时要求两边能对应起来,根据我们刚才得到的一一对应原则,我们只能将[l,r] 等分。设长度为len ,那么寻找y<2^k 使得左部分的低k 位,映射到右部分的低k 位。左部分范围:[2^k-len,2^k-1] ;右部分范围:[0,len-1] 。所以我们需要[2^k-len,2^k-1]\oplus y=[0,len-1] 。注意到[2^k-len,2^k-1]=[0,len-1]\oplus(2^k-1) ,那么令z=y\oplus(2^k-1) ,则原式即为[0,len-1]\oplus z=[0,len-1] ,又回到第一种情况,计算就行。
两种情况相加减一(