B. AGAGA XOOORRR
题目大意
给你一个长度为n的序列进行异或运算使得序列序变为长度>=2的只有相同元素的序列。问你是否可能
思路
当最后相同的元素为偶数个时,最后异或得到结果为0,如果最后相同的元素为奇数个时,你只需要判断从前往后每个异或得到的结果是或否与最后一个结果相同,记录这些个数,如果个数大于2的话就是可以的,也就是将这些元素,转换为最后异或结果相同的元素,为什么是大于2呢,如果从0只有一个元素也就是最后一个那么绝对不可能,如果从1呢这种情况属于偶数,会被直接判断掉。
通过代码
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization ("unroll-loops")
using namespace std;
#define ll long long
#define sl(n) scanf("%lld",&n)
#define pl(n) printf("%lld",n)
#define sdf(n) scanf("%lf",&n)
#define pdf(n) printf("%.lf",n)
#define pE printf("\n")
#define ull unsigned long long
#define pb push_back
#define debug(a) cout<<a<<"??"
#define me(a) memset(a,0,sizeof(a))
#define pre(n) for(ll i=1;i<=n;i++)
#define rep(n) for(ll i=n;i>=1;i--)
#define ph push
#define pi pair<ll,ll>
#define fi first
#define se second
const ll mod = 1e9 + 7;
ll a[3000],sum[3000],tag;
int main(){
ll t,n;
sl(t);
while(t--){
ll k=0;
sl(n);
pre(n)sl(a[i]);
pre(n)sum[i]=sum[i-1]^a[i];
if(sum[n]==0){
puts("YES");
continue;
}
ll q=0;
for(ll i=1;i<n;i++){
q^=a[i];
if(q==sum[n]){
k++;
q=0;
}
}
if(k>=2)puts("YES");
else puts("NO");
}
return 0;
}