题目翻译
给出有 $n$ 个数的序列 $b$,还原序列 $a$,使 $a_i$ 为除 $b_i$ 以外所有数的异或和。
$2\leq n\leq 2\times 10^6,0\leq a_i\leq 10^9$。
$n\equiv0\pmod{2}$。
题目思路
前置知识:异或的归零律、恒等律与自反 $a\oplus a=0,a\oplus 0=a,a\oplus b\oplus a=b$。
观察题意可得我们求出的 $a_i$ 即为 $b_1\oplus b_2\oplus \dots \oplus b_n$ 再去除一个 $b_i$。
设 $b_1\oplus b_2\oplus \dots \oplus b_n=k$。
我们根据异或的自反可得:
$$
\begin{aligned}k\oplus b_i&=b_1\oplus b_2\oplus \dots \oplus b_n\oplus b_i\\&=b_1\oplus b_2\oplus\dots\oplus b_{i-1}\oplus b_{i+1}\oplus b_{i+2}\oplus \dots \oplus b_n\end{aligned}
$$
于是我们得到了想求的 $a$ 数组。
完整代码
代码
#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[200020];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
k^=a[i];
}
for(int i=1;i<=n;i++)
{
cout<<(k^a[i])<<" \n"[i==n];
}
return 0;
}