题目描述

在给定的 NN 个整数 A_1,A_2,……,A_NA1​,A2​,……,AN​ 中选出两个进行xor运算,得到的结果最大是多少?
xor表示二进制的异或(^)运算符号。

输入格式

第一行输入一个整数 NN;
第二行输入 N 个整数 A_1~A_NA1​~AN​。

输出格式

输出一个整数表示答案。

 
赶紧复习一波,有一年没碰trie树了......
就是找两个数,他们异或值最大,建立01trie树,从高位向低位建立,即叶子结点是最低位。查询时尽量走相反的路,保证异或值最大。
 1 #include <bits/stdc++.h>
2 //#define loveGsy
3 using namespace std;
4 const int N = 1e5 + 10;
5 int trie[N * 31][2]; //每个数用31位二进制构造Trie树,每个节点为0或1
6 int a[N], n, ans, tot = 1;
7
8 void insert(int x) {//构建trie树
9 int p = 0;
10 for (int k = 30; k >= 0; k--) {//高位向低位枚举
11 int t = x >> k & 1;//计算x的第k位是1还是0 0~30
12 if (!trie[p][t]) trie[p][t] = ++tot;
13 p = trie[p][t];
14 }
15 }
16
17 int search(int x) {
18 int p = 0, tmp = 0;
19 for (int k = 30; k >= 0; k--) {
20 int t = x >> k & 1;//取出x第k位
21 if (trie[p][t ^ 1]) {
22 p = trie[p][t ^ 1];//贪心思想,走相反位
23 tmp = tmp + (1 << k);
24 }
25 else p = trie[p][t];
26 }
27 return tmp;
28 }
29
30 int main() {
31 #ifdef loveGsy
32 freopen("xor.in", "r", stdin);
33 freopen("xor.out", "w", stdout);
34 #endif
35 cin >> n;
36 for (int i = 1; i <= n; i++) {
37 scanf("%d", &a[i]);
38 insert(a[i]);
39 ans = max(ans, search(a[i]));
40 }
41 cout << ans << endl;
42 return 0;
43 }
 

最新文章

  1. c#xml追加读取节点
  2. 最大后验估计(MAP)
  3. 本机连接虚拟机Oracle时报错的解决办法
  4. poj 1659 Frogs&#39; Neighborhood (DFS)
  5. nosqlunit开源框架
  6. 详解Spring
  7. 浅谈JavaScript时间与正则表达式
  8. eclemma怎么安装 eclemma的安装与简单使用图文教程(附下载)
  9. SpringCloud项目启动报错:NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable
  10. LeetCode(118):杨辉三角
  11. CF1009E [Intercity Travelling]
  12. POJ 1958 Strange Towers of Hanoi
  13. android使用inject需要注意的地方
  14. winform窗体 控件【MDI 窗体容器】
  15. 设计模式 笔记 原型模式 prototype
  16. (转 留存)Windows环境下的NodeJS+NPM+GIT+Bower安装配置步骤
  17. 怎样查看lInux系统中的所有运行进程
  18. python开发学习-day02(元组、字符串、列表、字典深入)
  19. sift算法特征点如何匹配?
  20. Bomb Enemy -- LeetCode

热门文章

  1. 笔记本Usb接口案例
  2. 业务可视化-让你的流程图&quot;Run&quot;起来(4.实际业务场景测试)
  3. iNeuOS工业互联网操作系统,设备运维业务和“低代码”表单开发工具
  4. Windows环境下部署MySQL主从并模拟升级到8.0
  5. Geometrics类定义
  6. 数据结构与算法【Java】02---链表
  7. SQL SERVER数据库服务器CPU不能全部利用原因分析
  8. 调用 StatefulWidget 组件的参数时(widget.xxx)报 Invalid Constant Value
  9. shiro登录过程
  10. 【java】学习路线9-非静态内部类、外部类