在给定的 N N N个整数 A 1 , A 2 … … A N A_1,A_2……A_N A1,A2……AN中选出两个进行 x o r xor xor(异或)运算,得到的结果最大是多少?
输入格式
第一行输入一个整数 N N N。
第二行输入 N N N个整数 A 1 ~ A N A_1~A_N A1~AN。
输出格式
输出一个整数表示答案。
数据范围
1
≤
N
≤
1
0
5
1≤N≤10^5
1≤N≤105,
0
≤
A
i
<
231
0≤A_i<231
0≤Ai<231
输入样例:
3
1 2 3
输出样例:
3
尽量走二进制位相异的路
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n;
int trie[maxn*32][3],cnt=1,ans;
void insert(int x) {
int p = 1;
for (int i = 30; i >= 0; i--) {
int now = (x >> i) & 1;
if (!trie[p][now]) {
trie[p][now] = ++cnt;
}
p = trie[p][now];
}
}
int search(int x) {
int p = 1;
int res = 0;
for (int i = 30; i >= 0; i--) {
int now = (x >> i) & 1;
if (trie[p][now ^ 1]) {
res |= 1 << i;
p = trie[p][now^1];
} else {
p = trie[p][now];
}
}
return res;
}
int main() {
scanf("%d", &n);
for (int i = 1, x; i <= n; i++) {
scanf("%d", &x);
insert(x);
ans = max(search(x), ans);
}
printf("%d\n", ans);
}