nyoj 947 Max Xor(字典树)
来源:互联网 发布:暖男的同义网络词 编辑:程序博客网 时间:2024/05/22 14:33
Max Xor
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
- 给一个长度为 n 的数列 {an} ,找出 max {ai ^ aj}。
- 输入
- 多组测试数据。
第 1 行 1 个数 n。(1<=n<=10^5)
接下来的 1 行有 n 个数 ai。(0<=ai<=10^12) - 输出
- 1 行有 1 个数,max {ai ^ aj}。
- 样例输入
30 1 2
- 样例输出
3
解题思路:这道题很巧妙,首先把数字变成01串,这个很容易想到,但关键是如何处理这些01串,使得其xor最大。这里采用了字典树,将所有01串都放在字典树上,然后通过字典树的匹配去寻找最大的xor值。
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;typedef long long LL;const int maxn = 100005;struct Node{Node *next[2];};int n,c[55];LL a[maxn];Node *root;void process(LL s){int num = 50;memset(c,0,sizeof(c));while(s){c[num--] = s % 2;s /= 2;}}void insert(LL s){process(s);Node *p = root;for(int i = 0; i <= 50; i++){if(p->next[c[i]] == NULL){p->next[c[i]] = (Node *)malloc(sizeof(Node));p->next[c[i]]->next[0] = NULL;p->next[c[i]]->next[1] = NULL;}p = p->next[c[i]];}}LL find(LL s){process(s);Node *p = root;LL sum = 0;for(int i = 0; i <= 50; i++){if(p->next[!c[i]] == NULL){sum = sum * 2;p = p->next[c[i]];}else {sum = sum * 2 + 1;p = p->next[!c[i]];}}return sum;}int main(){while(scanf("%d",&n)!=EOF){for(int i = 1; i <= n; i++)scanf("%lld",&a[i]);root = (Node *)malloc(sizeof(Node));root->next[0] = root->next[1] = NULL;for(int i = 1; i <= n; i++)insert(a[i]);LL ans = 0;for(int i = 1; i <= n; i++)ans = max(ans,find(a[i]));printf("%lld\n",ans);}return 0;}
0 0
- nyoj - 947(Max Xor)字典树
- nyoj 947 Max Xor(字典树)
- 字典树--Xor问题
- HDU4825 Xor Sum 字典树
- hdu4825 Xor Sum 【字典树】
- 『字典树』xor
- NYOJ 290 字典树
- NYOJ 290 字典树
- 字典树-百度之星-Xor Sum
- hdu 4825 Xor Sum(字典树)
- 【01字典树】HDU 4825 Xor Sum
- HDU4825 - Xor Sum(Trie 字典树)
- POJ_3764_The xor-longest Path(01字典树)
- 【字典树】 HDOJ 4825 Xor Sum
- Xor Sum(字典树加贪心)
- 字典树 hdu5269 ZYB loves Xor I
- hdu 4825 Xor Sum(字典树)
- POJ 3764 树上XOR 贪心+字典树
- redis的学习
- 贪心----书架
- 8.正交匹配跟踪 Orthogonal Matching Pursuit (OMP)s
- 一个逗号引发的错误!
- 文艺二叉树
- nyoj 947 Max Xor(字典树)
- Shiro 框架授权
- oracle子查询
- Ext JS MVC Architecture
- Android开发中.9图片的制作
- Android系统进程Zygote启动过程的源代码分析
- Topic Model
- 欢迎使用CSDN-markdown编辑器
- 如何用Solr搭建大数据查询平台