地址:https://www.nowcoder.com/acm/contest/180/D
思路:对于 x XOR p= y 那么 x XOR y= p, 即对于序列a[n]中元素判断是否可以 XOR出 p。这个可以用线性基来解决。。
Code :
#include<iostream>
using namespace std;
typedef long long LL;
const int MAX_N=100005;
int n,Q;
int d[MAX_N];
int p[105];
void Build();
bool Find(int x);
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=0;i<n;++i)
cin>>d[i];
Build();
cin>>Q;
int a,b;
while(Q--){
cin>>a>>b;
if(Find(a^b)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
void Build()
{
for(int i=0;i<n;++i)
for(int j=31;j>=0;--j)
if(d[i]>>j){
if(!p[j]){
p[j]=d[i]; break;
}
d[i]^=p[j];
}
}
bool Find(int x)
{
bool boo=true;
for(int i=31;i>=0;--i)
if(x>>i) x^=p[i];
if(x) boo=false;
return boo;
}