在给定的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