1472:【例题2】The XOR Largest Pair
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 644 通过数: 304
【题目描述】
在给定的 N 个整数 A1,A2,…,AN 中选出两个进行异或运算,得到的结果最大是多少?
【输入】
第一行一个整数 N。
第二行 N 个整数 Ai 。
【输出】
一个整数表示答案。
【输入样例】
5
2 9 5 7 0
【输出样例】
14
【提示】
对于 100% 的数据,1≤N≤105,0≤Ai<231 。
#include <bits/stdc++.h>
using namespace std;
const int N=4e6+5;
int tree[N][2],cnt=0,n,x;
void Insert()//高位到低位
{
int now=0;
for(int i=30;i>=0;i--)//固定31位
{
int y=x>>i&1;
if(tree[now][y]==0)
tree[now][y]=++cnt;
now=tree[now][y];
}
}
int Find()
{
int now=0,ans=0;
for(int i=30;i>=0;i--)
{
int y=x>>i&1;
if(tree[now][!y])
{
ans+=1<<i;
now=tree[now][!y];
}
else
now=tree[now][y];
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
int res=0;
while(n--)
{
cin >> x;
Insert();
res=max(res,Find());
}
cout << res << endl;
return 0;
}