题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=98837#problem/I
题意:给定一些数,求这些数中异或值最大的值
分析:每个数都可以写成二进制,可以建立一颗字典树
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int N = 100000<<5;
struct Trie {
int a[2];
int num;
} f[N];
int cnt, ans;
// insert x into the root which id is u, the deep is num
void insert(int x, int u, int num)
{
bool k;
for (int i = num; i >= 0; i--)
{
k = (1<<i)&x;
if (f[u].a[k] == -1)
f[u].a[k] = ++cnt;
u = f[u].a[k];
}
f[u].num = x;
}
// query xor
void query(int x, int u, int num)
{
bool k;
for (int i = num; i >= 0; i--)
{
k = (1<<i)&x;
if (f[u].a[!k] != -1)
u = f[u].a[!k];
else
u = f[u].a[k];
}
ans = max(ans, f[u].num^x);
}
int main()
{
int n, t;
while(scanf("%d", &n)!=EOF)
{
memset(f, -1, sizeof(Trie) * N);
cnt = 0;
ans = 0;
while (n--)
{
scanf("%d", &t);
insert(t, 0, 31);
query(t, 0, 31);
}
printf("%d\n", ans);
}
return 0;
}
原文链接: https://www.cnblogs.com/gaoss/p/4954913.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/224293
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!