思路
线性基
线性基学习笔记
AC代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define maxn 100010
#define maxm 210
int a[maxm];
void Insert(int x)
{
int i;
for(i=32;i>=0;i--){
if(x&(1<<i)){
if(!a[i]){
a[i]=x;
break;
}
x^=a[i];
}
}
}
bool check(int x) //如果通过异或,x的值不为0,说明不可行,若为0,则可行
{
int i;
for(i=32;i>=0;i--){
if(x&(1<<i)){
if(!a[i]){
return false;
}
x^=a[i];
}
}
if(x==0)
return true;
return false;
}
int main()
{
memset(a,0,sizeof(a));
int i,n,q;
int x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&x),Insert(x);
scanf("%d",&q);
while(q--){
scanf("%d%d",&x,&y);
if(check(x^y))
printf("YES\n");
else printf("NO\n");
}
return 0;
}