思路:
首先异或是相同则0,不同则1,那我们考虑已经选了一个数,那么要使异或值尽可能大就要使最高位尽可能不等
那么直接trie
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
int n, m, tot=1;
int a[1010010];
int trie[1001000][2];
void insert_n(int x)
{
int p=1;
for(int i=31; i>=0; i--)
{
int c=(x>>i)&1;
if(!trie[p][c])
trie[p][c]=++tot;
p=trie[p][c];
}
}
int find_n(int x)
{
int p=1, sum=0;
for(int i=31; i>=0; i--)
{
int c=(x>>i)&1;
int b=0;
if(c==0)
b=1;
if(trie[p][b])
p=trie[p][b], sum+=1<<i;
else
p=trie[p][c];
}
return sum;
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
{
scanf("%d", &a[i]);
insert_n(a[i]);
}
int ans=0;
for(int i=1; i<=n; i++)
ans=max(ans, find_n(a[i]));
printf("%d", ans);
}