使用暴力求解肯定会超时,可以使用Trie树进行优化
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010, M = 3100010;
int n;
int q[N],son[M][2],idx;
// 将数组中的每个数都插入进去
void insert(int x)
{
int p=0;
for(int i=30;~i;i--)
{
int &s = son[p][x>>i&1];
if(!s) s = ++idx;
p =s;
}
return;
}
int query(int x)
{
int res=0,p=0;
for(int i=30;~i;i--)
{
int s = x>>i&1;
if(son[p][!s])
{
res+=1<<i;
p=son[p][!s];
}
else p=son[p][s];
}
return res;
}
int main(void)
{
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\n",res);
return 0;
}