A. XOR Mixup(按位异或)

 Problem - A - Codeforces

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] 就满足条件)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值