1.进制转换复习
2.关于N和M的范围
#include <iostream>
#include<algorithm>
using namespace std;
const int N=100010,M=31*N;
int son[M][2],pos=0;
int a[N];
void insert(int x)
{
int p=0;
for(int i=30;i>=0;i--)//i>=0可以简写成 ~i
{
int c=(x>>i)&1;
if(son[p][c]==0) son[p][c]=++pos;
p=son[p][c];
}
}
int query(int x)
{
int res=0;
int p=0;
for(int i=30;i>=0;i--)
{
int c=(x>>i)&1;
if(son[p][c^1]!=0)//存在更优的分支
{
res+=(1<<i);
p=son[p][c^1];
}
else
{
p=son[p][c];
}
}
return res;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
insert(a[i]);
}
int res=0;
for(int i=0;i<n;i++)
{
res=max(res,query(a[i]));
}
cout<<res;
return 0;
}