xor 2016 国庆集训day3
来源:互联网 发布:php 接口开发安全性 编辑:程序博客网 时间:2024/05/01 19:40
题目:给出 n 个数 a 1 ..a n ,求 a i xor a j , (i不等于j) 的最大值
• 对于 30% 的数据,n ≤ 1000。
• 对于另外 20% 的数据,数据保证最后的 ans 一定是 2^k − 1。
• 对于 70% 的数据,n ≤ 10 ^5 ,0 ≤ a i ≤ 10 ^7 。
• 对于 100% 的数据,n ≤ 10 ^5 ,0 ≤ a i ≤ 10 ^16 。
第一次打字典树。。。
把每个数转化二进制建树,树的第i层就是二进制的第i位, 每个节点有两个孩子,分别表示该位上0与1是否存在。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>long long n,i,j,a[100005],ans,b[5600005][2],u,v,s,t;int main(){ scanf("%lld",&n); ans=0; for (i=1;i<=n;i++) { scanf("%lld",&a[i]); for (j=55;j>=0;j--) //10^16大概55位 { v=(a[i]>>j)&1; if (b[u][v]==0) b[u][v]=++t; //若当前位还不存在则新延伸一个节点,新节点编号为t u=b[u][v]; //并且走到新的节点 } u=0; } for (i=1;i<=n;i++) //每个数都找一遍 { s=0;u=0; for (j=55;j>=0;j--) { v=(a[i]>>j)&1; if (!b[u][v^1]) u=b[u][v]; //若与当前位相反的节点不存在,只能走走当前位 else { u=b[u][v^1]; //否则走到与当前位相反的节点 s|=(1ll<<j); //此时第j位上值为1 计入答案 } } ans=std::max(ans,s); } printf("%lld",ans);}
0 0
- xor 2016 国庆集训day3
- 2016国庆集训day3-minimum.cpp
- 国庆郑州集训day3:数据结构
- 2017国庆郑州集训游记Day3
- 2016信烨国庆集训总结
- 湖南集训Day3
- 20160124集训Day3-数学
- ACM集训day3
- zzuacm集训day3
- 省队集训DAY3
- 沈阳集训day3
- 暑期集训 DAY3
- 集训题解-Day3
- 郑州集训DAY3笔记
- 北京集训DAY3
- qbxt国庆水题记day3
- 国庆音标集训
- 国庆集训总结
- Uva 倒水问题
- 2016.10.4初中部下午NOIP普及组比赛总结
- java通过SMTP发送QQ邮件的完全步骤
- poj2104 K-th Number
- Zabbix-3.0.x使用OneAlert发送告警
- xor 2016 国庆集训day3
- jQuery 清空div样式 $("#UserDivID").empty()
- Codeforces Round #375 (Div. 2) E. One-Way Reform(有n个点,m条无向边,给每条边定向,使得入度等于出度的点最多)
- 算法——交换排序
- My SQL 对数据的简单查询
- poj3984
- python中if __name__ == '__main__': 的解析
- 数据结构与算法学习-哈希表入门
- java入门之输出基本数据类型