在给定的N个整数 A_1,A_2,…,A_N中选出两个进行异或运算,得到的结果最大是多少?
Input
第一行一个整数N。
第二行N个整数 A_i
Output
一个整数表示答案。
Sample Input
5
2 9 5 7 0
Sample Output
14
HINT
1<= N<= 10^5, 0<= A_i <2^{31}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100001];
int trie[3100001][2],tot,n;
void ins(ll v)
{
int p=0;
for(int i=31;i>=0;i--)
{
int l=(v>>i)&1;
if(!trie[p][l])trie[p][l]=++tot;
p=trie[p][l];
}
}
ll find(ll v)
{
int p=0;
ll sum=0;
for(int i=31;i>=0;i--)
{
int l=(v>>i)&1;
if(trie[p][l^1])p=trie[p][l^1],sum=sum<<1|1;
else p=trie[p][l],sum=sum<<1;
}
return sum;
}
int main()
{
scanf("%d",&n);ll ans=0;
for(int i=1;i<=n;i++)scanf("%lld",&a[i]),ins(a[i]);
for(int i=1;i<=n;i++)ans=max(ans,find(a[i]));
printf("%lld\n",ans);
}
原文:https://www.cnblogs.com/cutemush/p/12419116.html