#include<iostream> #include<cstdio> #include<cstring> using namespace std; int map1[45][1005], ans, n, result[1005]; __int64 a[1005]; #define bits(x) ((1LL)<<(x)) int gauss(int sol) { int i,j,k,t; for(i=0,j=0; i<41 && j<sol; i++,j++) { k=i; while(!map1[k][j] && k<41) k++; if(k==41) { i--; continue; } if(k!=i) for(t = j; t <= sol; t++) swap(map1[i][t],map1[k][t]); for(k=i+1; k < 41; k++) if(map1[k][j]) for(t=j; t<=sol; t++) map1[k][t]^=map1[i][t]; } k=i; /* for(i=k; i<41; i++) if(map1[i][sol]) return -1; */ for(i=k-1,t=0; i >= 0; i--) { result[i] = map1[i][sol]; for(j=i+1; j<sol; j++) result[i]^=(map1[i][j]&&result[j]); if(result[i]) t++; } return t; } int main() { int cas, i, j, ans,n; char c; scanf("%d", &cas); while (cas--) { scanf("%d", &n); memset(map1, 0, sizeof (map1)); a[n] = 0LL; for(int i =0;i<n;i++) { scanf("%I64d",a+i); a[n] ^= a[i]; } for(int i = 0;i<41;i++) if(a[n] & bits(i)) map1[i][n] = 1; for(int i = 0;i<n;i++) for(int j = 0;j<41;j++) if(a[i] & bits(j)) map1[j][i] = 1; ans=gauss(n); if(ans==n) printf("No\n"); else printf("Yes\n"); } return 0; }
时间: 2024-10-14 12:21:31