codevs 3031:最富有的人
题目描述 Description
在你的面前有n堆金子,你只能取走其中的两堆,且总价值为这两堆金子的xor值,你想成为最富有的人,你就要有所选择。 输入描述 Input Description
第一行包含两个正整数n,表示有n堆金子。
第二行包含n个正整数,表示每堆金子的价值。 输出描述 Output Description
第一行包含一个正整数,表示能获得的最大总价值。 样例输入 Sample Input 样例输出 Sample Output 数据范围及提示 Data Size & Hint
数据范围:
n<= 每堆金子数<=^-
题目
芒果君:这道题第一个难点在,你特么看不出它是trie树啊啊啊啊!
然后,就算你看出来了,不会位运算,也hin难搞。
过程描述起来很简单,就是把每个数字变成二进制从位数上限开始建立trie树,再逐个查询,尽量向“1”的方向走取最大更新答案。这里出现的几个位运算我弱弱的解释一下。
① (x>>i)&1 的作用是找到二进制下x从右到左的第i+1位,一个数“>>”右移i是除以2的x次方,“&”叫位与,同为1则为1,否则为0,用它可以找到二进制的每一位数,因为1&1=1,0&1=0;
② trie[p][t^1] “^”叫异或,不同为1相同为0,你可以理解为“不进位的加法”,0^0=0,0^1=1,1^1=0,而且我才发现这道题用它找路的奇妙性质。我们的贪心策略是尽量往1走,如果该位是0需要1变成1,1需要0变成1,但是你有木有发现,它需要的“路”其实就是该位的数字与1异或的结果!
③total|=(1<<i) 左移“<<”就是乘2的i次方,“|”位或,只要有一个是1就是1,不然是0,它在这里可以强行把那一位改成1;
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100010
using namespace std;
int trie[maxn<<][],cnt,n;
long long a[maxn],ans;
void insert(int x)
{
int p=;
for(int i=;i>=;--i){
int t=(x>>i)&;
if(!trie[p][t]) p=trie[p][t]=++cnt;
else p=trie[p][t];
}
}
void query(int x)
{
int p=;
long long sum=;
for(int i=;i>=;--i){
int t=(x>>i)&;
if(!trie[p][t^]) p=trie[p][t];
else{
p=trie[p][t^];
sum|=(<<i);
}
}
ans=max(ans,sum);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%lld",&a[i]);
insert(a[i]);
}
for(int i=;i<=n;++i) query(a[i]);
printf("%lld\n",ans);
return ;
}
(PS:好久没有这么认真的写过题解了……)
codevs 3031:最富有的人的更多相关文章
- codevs3031 最富有的人
题目描述 Description 在你的面前有n堆金子,你只能取走其中的两堆,且总价值为这两堆金子的xor值,你想成为最富有的人,你就要有所选择. 输入描述 Input Description 第一行 ...
- vodevs3031 最富有的人
在你的面前有n堆金子,你只能取走其中的两堆,且总价值为这两堆金子的xor值,你想成为最富有的人,你就要有所选择. 输入描述 Input Description 第一行包含两个正整数n,表示有n堆金子. ...
- 做一个有理想的IT人
前段时间一直以来都在思考生命的价值的问题,一直在想人的一生的追求是什么.在这个物欲横流的社会,对人的价值的定义只是在财富积累的多少,这个是大多数人所认为的.但人的一生顶多百年,百年之后这些虚荣划归为尘 ...
- sentence patterns
第四部分 推理题 1.世界上每个角落的每个人都有立场,都有背景,都有推理性,能推理出一个人语言的真意,才成就了真正的推理能力: 2.换言之,如果你能通过一个人的说话推理出其身份职业,你的推理能 ...
- 张艾迪(创始人):创始人故事无限N个
世界第一女孩+世界第一互联网女孩 创始人故事无限N个 全球第一互联网女孩EidyZhang艾迪.张 The World No.1 Girl :Eidyzhang The World No.1 Inte ...
- AMD平台下在Windows虚拟机中安装Mac10.8.6【Written By KillerLegend】
我的电脑CPU是AMD,以前在虚拟机中装过Windows操作系统,感觉很简单,这几天想体验一下苹果系统,未来也可能会从事Mac相关软件开发,于是从早上便兴致勃勃的开始了--于是悲剧也开始了,上网各种查 ...
- Codeforces Round #352 (Div. 2) D. Robin Hood (二分答案)
题目链接:http://codeforces.com/contest/672/problem/D 有n个人,k个操作,每个人有a[i]个物品,每次操作把最富的人那里拿一个物品给最穷的人,问你最后贫富差 ...
- 【模拟】Codeforces 671B Robin Hood
题目链接: http://codeforces.com/problemset/problem/671/B 题目大意: N个人,每个人有Ci钱,现在有一个人劫富济贫,从最富的人之一拿走1元,再给最穷的人 ...
- CF 672 div2 D
http://codeforces.com/contest/672/problem/D 题目大意: 有n个人,每个人有pi的钱,然后可以由如下操作,每次都可以挑选一个最富有的人,把它的钱给最穷的人.但 ...
随机推荐
- BZOJ 4241: 历史研究 ( 回 滚 )
题目: 链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4241 题意:给你一个长度为n序列,m次查询,每次询问 一段区间 最大的 a[ i ...
- Java集合总结(二):Map和Set
集合类的架构图: HashMap 内部维护一个链表数组做哈希表,默认大小为16,最大值可以为2^30,默认负载因子0.75. 可以通过构造方法指定初始大小和负载因子,当键值对个数大于等于临界值thre ...
- 以字符串为例,谈谈Python到底要学到什么程度
古语云:慈不掌兵,义不为商:离商业越近,离人性越远:我们在自学数据科学时,一定会辅助一些书籍或者视频来学习,怎么学习,选择哪些资料来学习?这时,我们都要理解好第一句话,理解不好,浪费钱是次要,重要的是 ...
- Robot Framework(十八) 支持工具
5支持工具 5.1库文档工具(libdoc) libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具.前一种格式适用于人类,后者适用于RIDE和其他工具.Libdoc也没有 ...
- 5.4.1 sequenceFile读写文件、记录边界、同步点、压缩排序、格式
5.4.1 sequenceFile读写文件.记录边界.同步点.压缩排序.格式 HDFS和MapReduce是针对大文件优化的存储文本记录,不适合二进制类型的数据.SequenceFile作 ...
- 通过Nginx部署flask项目
用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能.所以采用nginx ...
- vi下如何配置自动更新标签(tags)?
答: 在~/.vimrc中写入以下内容即可: au BufWritePost *.c,*.cpp,*.h silent! !ctags -R & 参考资料: 一键打造vim ide
- Dart 语法中文在线学习网址收藏
为了学习flutter UI框架,必须先学好dart语言,故收藏了有关 Dart 语法中文在线学习网址 http://dart.goodev.org/guides/language/language- ...
- OpenNESS,开源的边缘网络服务平台
目录 文章目录 目录 参考文章 OpenNESS 的电梯间演讲 OpenNESS 与 ETSI MEC Edge Controller Software 的功能清单 Edge Platform Sof ...
- [ML] Roadmap: a long way to go
看上去不错的博文: 机器学习的经典算法一览 (一) 机器学习的经典算法一览 (二) 1.引言 正文将详细介绍传统机器学习算法,基本思想和用途.把问题解决思路和方法应用建议提前到这里的想法也 ...