拿相邻的两个数做异或 看能不能把数组里面所有的数整成相等的
#include <iostream>
#include <string>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <vector>
using namespace std;
const int N = 2000 + 10;
int n, a[N], b[N];
int main()
{
int t; cin>>t;
while(t--)
{
cin>>n;
for(int i = 1; i <= n; i++)
{
cin>>a[i];
b[i] = b[i - 1] ^ a[i];
}
bool f = 0;
if(!b[n]) f = 1;
else
{
bool f0 = 0, f1 = 0;
for(int i = 1; i <= n; i++)
{
if(!b[i])
{
f0 = 1;
for(int j = 1; j < i; j++)
{
if(b[j] == b[n])
{
f1 = 1; break;
}
}
if(f1) break;
}
}
if(f0 && f1) f = 1;
}
if(f) cout<<"YES\n";
else cout<<"NO\n";
for(int i = 1; i <= n; i++) a[i] = 0, b[i] = 0;
}
}
最后如果能相等 一定是两个数或者三个数 用异或前缀和