题目描述

在给定的 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 }
 

The XOR Largest Pair (trie树)的更多相关文章

  1. The XOR Largest Pair(tire树)

    题目 The XOR Largest Pair 解析 一年前听学长讲这道题,什么01trie,好高级啊,所以没学,现在一看.... 看到xor就应该想到二进制,一看数据\(A_i< 2^{31} ...

  2. The XOR Largest Pair [Trie]

    描述 在给定的N个整数A1,A2--AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N,第二行N个整数A1-AN. 输出格式 一个整数表示答案. 样例输入 3 1 2 3 ...

  3. CH 1602 - The XOR Largest Pair - [字典树变形]

    题目链接:传送门 描述在给定的 $N$ 个整数 $A_1, A_2,\cdots,A_N$ 中选出两个进行xor运算,得到的结果最大是多少? 输入格式第一行一个整数 $N$,第二行 $N$ 个整数 $ ...

  4. CH1602 The XOR Largest Pair【Trie树】

    1602 The XOR Largest Pair 0x10「基本数据结构」例题 描述 在给定的N个整数A1,A2……AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N, ...

  5. 「LOJ#10050」「一本通 2.3 例 2」The XOR Largest Pair (Trie

    题目描述 在给定的 $N$ 个整数 $A_1,A_2,A_3...A_n$ 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数$N$. 第二行$N$个整数$A_i$. 输出格式 ...

  6. The XOR Largest Pair

    刷刷书上的例题 在给定的N个整数A1,A2……An中选出两个进行XOR运算,得到的结果最大是多少?N<=105,0<=Ai<231 SOlution: 我们思考到对于两个数相异或,是 ...

  7. HDU 4825 Xor Sum (trie树处理异或)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total S ...

  8. LOJ10050 The XOR Largest Pair

    题意 在给定的 \(N\) 个整数 \(A_1,A_2,-,A_N\) 中选出两个进行异或运算,得到的结果最大是多少? 对于 \(100\%\) 的数据,\(1\le N\le 10^5, 0\le ...

  9. HDU4825 Xor Sum(贪心+Trie树)

    Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeu ...

随机推荐

  1. 字节输出流的续写和换行和字节输入流InputStream类&FileInputStream类介绍

    数据追加续写 每次程序运行,创建输出流对象,都会清空目标文件中的数据.如何保目标文件中的数据,还能继续添加新数据呢? public FileOutputStream(File file,boolean ...

  2. iframe 标签

    iframe是一个内联框架,可以在当前HTML页面中嵌入另一个文档,一般情况下使用iframe直接在页面嵌套iframe标签再指定src就可以了. iframe 的常用属性: name : 规定 &l ...

  3. 小白之Python基础(四)

    条件判断和循环: 1.条件判断类型: 1)if语句:(注意:if中的条件如果是:非零数值.非空字符串.非空list等,就判断为True,否则为False.) 2)if-else语句: 3)if-eli ...

  4. 云原生Devops 的实现方法

    DevOps 是一个持续改善软件产品的过程,它通过极短的发布周期.全面自动化的集成和交付流水线,以及团队间的紧密协作来不断改善产品.DevOps 的目标是缩短将创意变成用户可以使用的产品的时间,并降低 ...

  5. 通俗理解ABP中的模块Module

    网上有不少文章说ABP的模块,有的直接翻译自官网介绍,有的分析Modlue的源代码,有的写一通代码,没什么注释,很少有能通俗说清的.那么,有两个问题:1.ABP中的模块到底是什么?2.搞这个东西是干嘛 ...

  6. HttpServletResponse 类

    HttpServletResponse 类的作用 HttpServletResponse 类和 HttpServletRequest 类一样.每次请求进来,Tomcat 服务器都会创建一个 Respo ...

  7. 如何使用.NET 6的IHostedService和BackgroundService?

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本章是<定制ASP NET 6.0框架系列文章>的第七篇.本文内容和定 ...

  8. redis淘汰策略和过期策略

    淘汰策略 https://blog.csdn.net/qq_55961709/article/details/124568269 LRU算法和LFU算法的区别: LRU:最近最少使用,淘汰时间长没有使 ...

  9. CF914G Sum the Fibonacci (快速沃尔什变换FWT + 子集卷积)

    题面 题解 这是一道FWT和子集卷积的应用题. 我们先设 cnt[x] 表示 Si = x 的 i 的数量,那么 这里的Nab[x]指满足条件的 Sa|Sb=x.Sa&Sb=0 的(a,b)二 ...

  10. 大家都能看得懂的源码 - ahooks 是怎么处理 DOM 的?

    本文是深入浅出 ahooks 源码系列文章的第十三篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本篇文章探讨一下 ahooks 对 DOM 类 Hooks 使用 ...