Q : [算法竞赛进阶指南]The XOR Largest Pair 最大异或对
Time Limit:2 Sec Memory Limit:128 MiB
Back Submit Edit
Description
在给定的N个整数A1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少?
Input
第一行输入一个整数N。
第二行输入N个整数A1~AN。
数据范围:
1 ≤ N ≤ 10^5 ,
0 ≤ Ai < 2^31
Output
输出一个整数表示答案。
Sample Input
3
1 2 3
Sample Output
3
可以直接套模板利用
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100010;
int trie[maxn*32][2];
int n;
int sum[maxn];
int cnt=0;
void insert(int num)
{
int p=0;
for(int i=31;i>=0;i--)
{
int &c=trie[p][(num>>i)&1];
if(!c)c=++cnt;
p=c;
}
}
int find(int num)
{
int p=0,s=0;
for(int i=31;i>=0;i--)
{
int &c=trie[p][!((num>>i)&1)];
if(c){
s+=1<<i;
p=c;}
else p=trie[p][(num>>i)&1];
}
return s;
}
int main(){
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&sum[i]);
insert(sum[i]);
}
int maxnn=0;
for(int i=0;i<n;i++)
maxnn=max(maxnn,find(sum[i]));
cout<<maxnn;
return 0;
}