专栏文章

题解:CF2160C Reverse XOR

CF2160C题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minm4wvn
此快照首次捕获于
2025/12/02 04:39
3 个月前
此快照最后确认于
2025/12/02 04:39
3 个月前
查看原文

题解:CF2160C Reverse XOR

题目分析

题意易懂,这里不再赘述。
以下对于字符串的描述,下标均以 11 开始。
简单分析一下:
对于由数字 xx 转换而来的 0101SxS_x,第 ii 位的数字翻转后将会对应到第 Sxi+1|S_x| - i + 1 位,其中 S|S| 指字符串 SS 的长度。相反地,第 Sxi+1|S_x| - i + 1 位的数字在翻转后将会对应到第 ii 位。
由此我们可以得出结论:对于由数字 nn 转换而来的 0101SnS_n,第 jj 位的值必须要和第 Snj+1S_n - j + 1 位相等(也就是说, SnS_n 是一个回文串),否则 xf(x)=nx \oplus f(x) = n 不成立。
由异或的性质可得,如果异或值为 00,那么这一位上的两个数相等。不难发现,对于 SnS_n 的每一个后缀零,我们在 SnS_n 的前方添加前导零,是不会影响正确性的判断的。
这一部分可能有点难懂,举个例子:对于 33,它的二进制表示是这样的:11。不难发现,当 x=2x = 2 时,有 2f(2)=32 \oplus f(2) = 3。随后,我们在 11 前后各添加一个 0,变为 0110,即十进制数 66。可以发现,只需要在 22 的二进制表示 1010 前后各添加一个相同的数,异或串的前后就会各多出一个 0,满足我们之前在串前后增加的 0
最后,如果补充完前导零后的 Sn|S_n| 为一个奇数,那么第 Sn+12\dfrac{|S_n| + 1}{2} 位(即中间位)应当为 00。因为此时,翻转前和翻转后的第 Sn+12\dfrac{|S_n| + 1}{2} 位的值一定相等,所以异或值一定为 00

评论

0 条评论,欢迎与作者交流。

正在加载评论...