nyoj 947 Max Xor(字典树)
Max Xor
- 描述
-
给一个长度为 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(字典树)相关推荐
- NYOJ 685 查找字符串 字典树
查找字符串 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗 ...
- nyoj - 947(Max Xor)字典树
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=947 /**你可以把所有的数字变成等长的二进制,当成字符串然后建字典树,再枚举每个数把这个 ...
- 字典树--Xor问题
字典树大家都知道吧,如果不知道可以看这里,我的模板写得还是不错的: 字符串–Trie树(字典树) 接下来我们先看一个问题,通过这个问题来了解Xor这个运算的基本性质: 洛谷 P2420 让我们异或吧 ...
- 2014百度之星资格赛—— Xor Sum(01字典树)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- 【HDOJ6955】Xor sum(异或前缀和,01字典树)
1006 Xor sum 题意: 给出一个长度为n的序列,求一个最短连续子序列满足异或和大于等于k.n<1e5. 思路: 参考CF665E,求序列a中有多少个异或和大于等于k的子序列,枚举所有的 ...
- 【LOJ10050】The XOR Largest Pair(字典树)
problem 给定n个整数,在其中任意选出两个进行xor运算,得到的结果最大值是多少? n<1e5,ai在int范围内 solution 朴素枚举,O(n^2), TLE 考虑异或运算,相同为 ...
- 【CF1616H】Keep XOR Low(字典树)
题面 题解 为了方便,我们将 xxx 加 1,然后让 aixoraj<xa_i\mathrm{~xor~}a_j<xai xor aj<x . 可以把数插入到字典树中,然后遍历字 ...
- HDU4825 Xor Sum 01字典树(Tire Tree)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- HDU多校1 - 6955 Xor sum(字典树+贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,要求找到一段长度最短的区间,使得异或和大于等于 kkk,如果有多种答案,输出左端点最小的那个 题目分析:倒着维护一下后缀异或和,将后缀异或 ...
最新文章
- 算法--合并两个有序链表
- 知乎:fastjson 这么快,为啥老外还是热衷 jackson?
- 一文带你了解MySQL中的各种锁机制!
- imagereader java_java中ImageReader和BufferedImage获取图片尺寸实例
- python中的reg_如何在python中从注册表读取字符串格式的Reg_二进制类型值
- python3.9新特性_Python 3.9正式版,新特性提前一睹为快
- ASP.NET刷新页面的六种方法(转) 包括在跳转的时候使用提示
- 【数字信号】基于matlab GUI手机拨号音效模拟【含Matlab源码 909期】
- 功能设计与交互设计的冲突和融合_邓昆
- YALMIP工具箱之解决半定规划问题的SDPT3求解器安装
- Python精讲:Python中集合的概念和创建方法详解
- 微信小程序 java社区快递柜取件管理系统python php
- 破局:技术视野与规划
- Excel2021单元格怎么做下拉菜单
- Vue使用ElementUI的Table组件表头与内容不对齐问题
- mysql 分区 分表 分库分表
- SQLServer表关联查询
- admin@1.0.0 dev: vite --mode production
- 助力文化荟萃,区块链或可打造“新”春晚?
- 转凯文·凯利斯坦福演讲-预言未来20年科技潮流