这是一道数学题,看懂题目给的式子很重要

以题目举例的式子为例:[(a1&a1)|(a1&a2)^(a2&a1)|(a2&a2)]

首先理解与运算和或运算

与运算可以理解为取交集,也就是两个数二进制每位共有的为1或者都没有为1,只有一方有就为0

或运算可以理解为取并集,与就是两个二进制每位只要有一个有1则为1,全部没有则为0

那么式子直接先化简a1&a1=a1和a2&a2=a2,因为与自己本身取交集还是自己的那块区域

再化简a1|(a1&a2)这意思不就是先取a1和a2的交集再和a1取并集就是了,很显然可以想a1和a2取交集的区域一定属于或等于a1或者a2的所在区域,那么再取并集不还是a1本身吗?

后面的a2|(a1&a2)同理等于a2

最终式子只剩a1^a2

得到结果就是a1^a2^...^an

(其实可以自己试一试答案,如果你试了题目给的解法一定会超时。然后再发现题目是O(n^2)所以我们一定要优化到O(n)那么就要想着对着式子化简,再然后带几个数字进去试一试最终应该也能解决!!!)

#include<bits/stdc++.h>
using namespace std;
#define int long long

void solve(){
    int n;
    cin>>n;
    vector<int>a(n+1);
    int res=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        res^=a[i];
    }
    cout<<res<<endl;
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while (t--) {
        solve();
    }
    return 0;
}