题目链接不发了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=100005;
int trie[maxn*30][2],tot,consi[35];
void Insert(){
int rt=0;
for(int i=1;i<=32;i++){
int now=consi[i];
if(!trie[rt][now]) trie[rt][now]=++tot;
rt=trie[rt][now];
}
}
void deal(int x){
int num=32;
while(num){
if(x&1) consi[num]=1;
else consi[num]=0;
num--; x/=2;
}
}
ll Search(){
ll ans=0; int rt=0;
for(int i=1;i<=32;i++){
int a=consi[i]; a^=1;
int wei=32-i;
if(trie[rt][a]){
if(a==1) ans=ans+(1<<wei);
rt=trie[rt][a];
}
else {
if(a==0) ans=ans+(1<<wei);
a^=1;
rt=trie[rt][a];
}
}
return ans;
}
int main(){
int t,cas=0,n,q,x;
cin>>t;
while(t--){
memset(trie,0,sizeof(trie)); tot=0;
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++){
scanf("%d",&x);
deal(x);
Insert();
}
printf("Case #%d:\n",++cas);
while(q--){
scanf("%d",&x);
deal(x);
printf("%lld\n",Search());
}
}
return 0;
}