题目:
题解:
对于数组中每一个数尽量找到另一位每一位二进制位都是与之相反的数,这样就需要将每一个数拆开存储。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=100010,M=20000010;
int q[N];
int son[M][2],idx;
void insert(int x){
int n=0;
for(int i=30;~i;i--){
int t=x>>i&1;
if(!son[n][t])son[n][t]=++idx;
n=son[n][t];
}
}
int query(int x){
int res=0,n=0;
for(int i=30;i>=0;i--){
int t=!(x>>i&1);
if(son[n][t]){
res+=1<<i;
n=son[n][t];
}else n=son[n][!t];
}
return res;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",q+i);
insert(q[i]);
}
int res=0;
for(int i=0;i<n;i++)res=max(res,query(q[i]));
printf("%d",res);
return 0;
}