不能直接先把 x 拆位,而是要边异或边判断。
12pts:
void insert(int x){
cnt=0;
int p=x;
while(x>0){
h[++cnt]=x&1;
x>>=1;
}
for(int i=cnt;i>=1;i--){
if(h[i]){
if(!w[i]){
w[i]=p;
return;
}else{
p^=w[i];
}
}
}
return;
}
100pts:
void insert(int x){
for(int i=60;i>=0;i--){
if(x&(1ll<<i)){
if(!w[i]){
w[i]=x;
return;
}else{
x^=w[i];
}
}
}
return;
}