#850. 最大异或对
最大异或对
输入样例
3
1 2 3
输出样例
3
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n, a[N], f[N*31][2], idx;
void minsert(int num){
int p = 0;
for(int i=30; i>=0; i--){ //右移i位
int x = (num >> i) & 1;
if(!f[p][x]) f[p][x]= ++idx;
p = f[p][x];
}
}
int mfind(int num){
int p = 0;
int ans = 0;
for(int i=30; i>=0; i--){
int x = (num >> i) & 1;
if(f[p][!x]){
ans += (1 << i);
p = f[p][!x];
}
else p = f[p][x];
}
return ans;
}
int main(){
cin >> n;
for(int i=1; i<=n; i++){
cin >> a[i];
minsert(a[i]); //构建trip树
}
int ans = 0;
for(int i=1; i<=n; i++) ans = max(ans, mfind(a[i]));
cout << ans;
return 0;
}
相关
在以下作业中: