1472 The XOR Largest Pair
嗯?ybt这么毒瘤了?例2我就蒙了?
话说这个题感觉是个线段树或者树状数组的题,为什么,感觉这么变态呢,似乎和trie没啥关系
这里Trie的关系就在于把每一个数建立在字典树上,然后进行求异或值,最后比较最大值输出即可,倒是不难理解
这里涉及到一个知识点x>>i表示进行往下搜索一个点
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
const int SIZE=4e6+5;
int n,x;
int cnt=0;
int tree[SIZE][2];
void insert()
{
int now=0;
for(int i=30;i>=0;i--)
{
int y=x>>i&1;
if(tree[now][y]==0)//需要新建节点
tree[now][y]=++cnt;
now=tree[now][y];
}
}
int findd()
{
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()
{
cin>>n;
int res=0;
while(n--)
{
cin>>x;
insert();//建立Trie树
res=max(res,findd());//比较异或的最大值
}
cout<<res<<endl;
return 0;
}