通过计算可知,因为每一个数字都需要与所有的数字进行按位与然后再按位或,所以时间复杂度在n2以上,这就导致模拟做法一定会超时,所以我们来寻找数学规律 ;
观察到,因为按位与是保留两个数字二进制都为1 , 所以一个数字和另外一个数字的按位与其实是他们共同拥有的1,但是由于开始的按位与它自己,所以我们能够知道在进行按位或之后它一定是它自己,所以算法简化为所有的数字按位异或,这也就是算法实现的这一点。
#include <bits/stdc++.h>
#define int long long
using namespace std;
#define endl '\n'
void work()
{
int n; cin >> n ;
int x = 0 ;
for(int i = 1 ; i <= n ; i++)
{
int y ; cin >> y ;
x ^= y ;
}
cout << x << endl ;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
{
work();
}
return 0;
}

京公网安备 11010502036488号