题解 | #汉堡猫猫#

讲一个和官方题解不太一样的做法。

一开始套路地想到从高位到低位贪心,即尽可能让高位为 ,如果能使得某一位为 ,在确保这一位为 的情况下继续向低位贪心。但这是不太好做的,因为在处理低位时,很难保证高位为

观察样例发现,如果序列中恰有奇数个奇数,那么答案为 ,也就是可以让答案的所有位都是 。因为我们可以让奇数都变成 ,偶数都变成 ,这样异或和就是

如果奇数的个数是偶数呢?由于最低位不能被修改,所以答案的最低位只能是 。那么我们可以把所有数的最低位删掉,递归处理下一位。一般地,如果对于所有 ,序列中恰有偶数个元素的第 位是 ,而有奇数个元素的第 位是 ,那么答案的第 位只能是 ,而我们可以把那些第 位是 的元素操作成

其它元素操作成

于是答案的第 位是 ,而 位是

还需要考虑一种情况:序列中第 为是 的元素数量为偶数,但可以调整为奇数。这需要存在某个元素的第 位和第 位不同。

最后特判一下序列全是 的情况即可。

代码