There is an array aa with n−1n−1 integers. Let xx be the bitwise XOR of all elements of the array. The number xx is added to the end of the array aa (now it has length nn), and then the elements are shuffled.
You are given the newly formed array aa. What is xx? If there are multiple possible values of xx, you can output any of them.
Input
The input consists of multiple test cases. The first line contains an integer tt (1≤t≤10001≤t≤1000) — the number of test cases. The description of the test cases follows.
The first line of each test case contains an integer nn (2≤n≤1002≤n≤100) — the number of integers in the resulting array aa.
The second line of each test case contains nn integers a1,a2,…,ana1,a2,…,an (0≤ai≤1270≤ai≤127) — the elements of the newly formed array aa.
Additional constraint on the input: the array aa is made by the process described in the statement; that is, some value of xx exists.
Output
For each test case, output a single integer — the value of xx, as described in the statement. If there are multiple possible values of xx, output any of them.
Example
input
Copy
4 4 4 3 2 5 5 6 1 10 7 10 6 6 6 6 6 6 6 3 100 100 0
output
Copy
3 7 6 0
Note
In the first test case, one possible array aa is a=[2,5,4]a=[2,5,4]. Then x=2⊕5⊕4=3x=2⊕5⊕4=3 (⊕⊕ denotes the bitwise XOR), so the new array is [2,5,4,3][2,5,4,3]. Afterwards, the array is shuffled to form [4,3,2,5][4,3,2,5].
In the second test case, one possible array aa is a=[1,10,6,10]a=[1,10,6,10]. Then x=1⊕10⊕6⊕10=7x=1⊕10⊕6⊕10=7, so the new array is [1,10,6,10,7][1,10,6,10,7]. Afterwards, the array is shuffled to form [6,1,10,7,10][6,1,10,7,10].
In the third test case, all elements of the array are equal to 66, so x=6x=6.
In the fourth test case, one possible array aa is a=[100,100]a=[100,100]. Then x=100⊕100=0x=100⊕100=0, so the new array is [100,100,0][100,100,0]. Afterwards, the array is shuffled to form [100,100,0][100,100,0]. (Note that after the shuffle, the array can remain the same.)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
int a[110];
scanf("%d",&t);
while(t--)
{
int ans=-1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
{
int now=0;
for(int j=1;j<=n;j++)
{
if(j!=i)now^=a[j];
}
if(now==a[i])
{
ans=a[i];
break;
}
}
printf("%d\n",ans);
}
return 0;
}
题解:
由于按位异或运算有交换律(a ^ b ^ c = a ^ c ^b), 我们可以把所有数按位异或得到 sum.
我们可以通过对 sum 再次异或得到异或之前的两个数. a ^ b = c, c ^ a = b, c ^ b = a.
然后遍历这 n 个数, 如果 sum ^ x == x, 输出 x 即可. (a[1] 就满足条件)