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}。
样例输入
3
0 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;
}

nyoj 947 Max Xor(字典树)相关推荐

  1. NYOJ 685 查找字符串 字典树

    查找字符串 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗 ...

  2. nyoj - 947(Max Xor)字典树

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=947 /**你可以把所有的数字变成等长的二进制,当成字符串然后建字典树,再枚举每个数把这个 ...

  3. 字典树--Xor问题

    字典树大家都知道吧,如果不知道可以看这里,我的模板写得还是不错的: 字符串–Trie树(字典树) 接下来我们先看一个问题,通过这个问题来了解Xor这个运算的基本性质: 洛谷 P2420 让我们异或吧 ...

  4. 2014百度之星资格赛—— Xor Sum(01字典树)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

  5. 【HDOJ6955】Xor sum(异或前缀和,01字典树)

    1006 Xor sum 题意: 给出一个长度为n的序列,求一个最短连续子序列满足异或和大于等于k.n<1e5. 思路: 参考CF665E,求序列a中有多少个异或和大于等于k的子序列,枚举所有的 ...

  6. 【LOJ10050】The XOR Largest Pair(字典树)

    problem 给定n个整数,在其中任意选出两个进行xor运算,得到的结果最大值是多少? n<1e5,ai在int范围内 solution 朴素枚举,O(n^2), TLE 考虑异或运算,相同为 ...

  7. 【CF1616H】Keep XOR Low(字典树)

    题面 题解 为了方便,我们将 xxx 加 1,然后让 aixoraj<xa_i\mathrm{~xor~}a_j<xai​ xor aj​<x . 可以把数插入到字典树中,然后遍历字 ...

  8. HDU4825 Xor Sum 01字典树(Tire Tree)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

  9. HDU多校1 - 6955 Xor sum(字典树+贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,要求找到一段长度最短的区间,使得异或和大于等于 kkk,如果有多种答案,输出左端点最小的那个 题目分析:倒着维护一下后缀异或和,将后缀异或 ...

最新文章

  1. 算法--合并两个有序链表
  2. 知乎:fastjson 这么快,为啥老外还是热衷 jackson?
  3. 一文带你了解MySQL中的各种锁机制!
  4. imagereader java_java中ImageReader和BufferedImage获取图片尺寸实例
  5. python中的reg_如何在python中从注册表读取字符串格式的Reg_二进制类型值
  6. python3.9新特性_Python 3.9正式版,新特性提前一睹为快
  7. ASP.NET刷新页面的六种方法(转) 包括在跳转的时候使用提示
  8. 【数字信号】基于matlab GUI手机拨号音效模拟【含Matlab源码 909期】
  9. 功能设计与交互设计的冲突和融合_邓昆
  10. YALMIP工具箱之解决半定规划问题的SDPT3求解器安装
  11. Python精讲:Python中集合的概念和创建方法详解
  12. 微信小程序 java社区快递柜取件管理系统python php
  13. 破局:技术视野与规划
  14. Excel2021单元格怎么做下拉菜单
  15. Vue使用ElementUI的Table组件表头与内容不对齐问题
  16. mysql 分区 分表 分库分表
  17. SQLServer表关联查询
  18. admin@1.0.0 dev: vite --mode production
  19. 助力文化荟萃,区块链或可打造“新”春晚?
  20. 转凯文·凯利斯坦福演讲-预言未来20年科技潮流

热门文章

  1. 不知因果,何以谈优化?
  2. MDT跨网段UEFI部署系统
  3. MyBatis多对多关联查询示例——MyBatis学习笔记之十八
  4. 深度 | 人工智能全局概览:通用智能的当前困境和未来可能
  5. 最长下降/上升子序列问题
  6. 为什么单例模式需要double check
  7. windows API 实现截图
  8. How to become an expert in the IP industry? Here is where you should start
  9. what you should do when you are alone
  10. 和身体和谐相处的经验