题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y
题解:线性基
#include <bits/stdc++.h>
using namespace std; const double EPS = 1e-;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + ;
const int maxn = 1e2 + ;
int n, q;
long long p[maxn]; int main()
{
scanf("%d", &n); for(long long i = , x; i < n; i++){
scanf("%lld", &x);
for(int j = ; j >= ; j--){
if(x >> j){
if(!p[j]){
p[j] = x;
break;
}
x ^= p[j];
}
}
} for(int i = ; i < ; i++) cout<<p[i]<<" ";cout<<endl; scanf("%d", &q); long long x, y;
while(q--){
scanf("%lld%lld", &x, &y); x ^= y; for(int j = ; j >= ; j--){
if(x >> j) x ^= p[j];
} if(x) puts("NO");
else puts("YES");
} return ;
}