【LOJ 10050】The XOR Largest Pair【Trie】
题目大意:
题目链接:https://loj.ac/problem/10050
求一个数列中的任意两个数字亦或的最大值。
思路:
如果给出一个数字,求一个不比它位数大的数使得这两个数亦或的值最大,那么这个数应该取多少?
我们知道如果这个数转化为二进制后为100101101,那么亦或后最大值肯定是111111111,那么当另外一个数是011010010时,才能使他们的亦或值最大。
那么就构造一个 T r i e Trie Trie,将每个数转化为二进制之后都扔进 T r i e Trie Trie里,然后对于每一个数,再将它取反,并与 T r i e Trie Trie比较,如果有相同的就走相同的,否则就走不同的。
代码:
#include <cstdio>
#include <algorithm>
#define M 5000005
#define up 30
using namespace std;int n,x,y,k,tot=1,trie[M][2],d[M],z,ans;void insert(int x) //插入
{int p=1;for (int i=up;i>=0;i--){int id=(x>>i)&1; //取反if (!trie[p][id]) trie[p][id]=++tot; //新建结点p=trie[p][id];}
}int find(int x) //查找
{int p=1,sum=0; for (int i=up;i>=0;i--){int id=(x>>i)&1;if (trie[p][id^1]) //取反{sum=(sum<<1)|1;p=trie[p][id^1];}else if (trie[p][id]) //不取反{sum<<=1;p=trie[p][id];}}return sum;
}int main()
{scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&d[i]),insert(d[i]);for (int i=1;i<=n;i++)ans=max(ans,find(d[i]));printf("%d",ans);
}
【LOJ 10050】The XOR Largest Pair【Trie】相关推荐
- 【LOJ 10050】The XOR Largest Pair
[题目] 传送门 题目描述: 在给定的 n n n个整数 a 1 a_1 a1, a 2 a_2 a2-- a n a_n an 中选出两个进行 x o r xor xor 运算,得到的结果最大 ...
- loj#10050-The XOR Largest Pair【Trie(字典树)】
正题 题目链接:https://loj.ac/problem/10050 题目大意 有n个数,求两个数使他们异或起来最大. 解题思路 我们考虑构建一个TrieTrieTrie. 两个分叉为0,1,对于 ...
- 【LOJ10050】The XOR Largest Pair(字典树)
problem 给定n个整数,在其中任意选出两个进行xor运算,得到的结果最大值是多少? n<1e5,ai在int范围内 solution 朴素枚举,O(n^2), TLE 考虑异或运算,相同为 ...
- 数据结构总结1(火车进栈/兔子与兔子/括号画家/Editor/邻值查找/最大子序和/前缀统计/Phone List/The XOR Largest Pair)
问题 A: 火车进栈 题目描述 这里有n列火车将要进站再出站-- 但是,每列火车只有1节-那就是车头-- 描述 有n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个 ...
- The XOR Largest Pair(算法竞赛进阶指南 P72,Trie)
一.题目链接: The XOR Largest Pair 二.题目大意: 有 n 个数,求任意两个数异或得到的最大值. 三.分析: 刚学习了字典树,觉得还不错. 把每个数分解为二进制存到字典树中,查询 ...
- The XOR Largest Pair(01trie模板题)
题意:给你一堆数,问你从里面跳出来两个数异或和最大. (菜鸡第一次用字典树做题) 题解:之前没用过字典树做题,,看了大佬的题解,才知道字典树还有这种妙用. 对于二进制,如果我们想让它最大,(一点贪心的 ...
- 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS
[BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...
- 【BZOJ4269】再见Xor 高斯消元
[BZOJ4269]再见Xor Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整 ...
- 【LOJ#6682】梦中的数论(min_25筛)
[LOJ#6682]梦中的数论 https://www.cnblogs.com/cjyyb/p/11178395.html 利用min_25筛,求解约数个数函数平方的前缀和.
最新文章
- 计算机科学和PYTHON编程导论_15_概率与分布
- python 链式比较 2._特色的Python序列解包、链式赋值、链式比较
- VC.NET扩展Windows磁盘清理工具的功能
- 从晶体管特性曲线看饱和问题(Z)
- PHP中file() 函数和file_get_contents() 函数的区别
- VLAN简介交换机VLAN配置
- Windows服务器高并发处理IOCP(完成端口)详细说明
- C++ vector 初始化大小
- 简单多边形的三角剖分相关技术
- DSP之ICETEK-DM6437-B开发
- php模拟QQ登录获得skey码,请教:QQ授权第三方登录论坛之authorize模拟访问,一直失败...
- AAE结合resnet的生成器搭建(失败)
- 缺省路由(默认路由)实验
- SuperMap云许可配置
- 用双向宽搜来提高搜索效率
- Drupal 模块开发基本教程(三)
- matlab中的A(:)
- 友谊随笔——你是人间四月天(竹)
- 一个c程序的执行是从什么开始的?
- android 联系人 头像