字典树-THE XOR largest pair】的更多相关文章

题目:给你n个数字A1,A2....An ,问从中选出两个数字异或运算得到的最大结果是多少 0<=Ai<231 用字典树,记录每个数字的31位2进制01串(int 为4个字节,每个字节8个二进制,int一共32位,最高位为符号位,所以不考虑) #include<bits/stdc++.h> using namespace std; ; ]; int a[maxn]; ; int main() { int n; cin>>n; ; j<=n; j++) // 把n个…
题目 The XOR Largest Pair 解析 一年前听学长讲这道题,什么01trie,好高级啊,所以没学,现在一看.... 看到xor就应该想到二进制,一看数据\(A_i< 2^{31}\),考虑把所有的数都处理成长度为32的二进制数,插入字典树中,查询的时候就逐位比较,有不同的先走不同的那边,这样保证了每次插入一个数时查询的结果是最大的,然后不断更新最大值就可以了 我这种不用位运算的懒人就直接用bitset维护了 从高位到地位插入可能好算一些 代码 #include <bits/st…
1602 The XOR Largest Pair 0x10「基本数据结构」例题 描述 在给定的N个整数A1,A2……AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N,第二行N个整数A1-AN. 输出格式 一个整数表示答案. 样例输入 3 1 2 3 样例输出 3 数据范围与约定 对于100%的数据: N<=10^5, 0<=Ai<2^31. 思路: 把一个整数看作长度是32的二进制01串. 要找到异或最大的一对,就是要沿着与当前位相反的字符指针往下访问.…
题目描述 在给定的 $N$ 个整数 $A_1,A_2,A_3...A_n$ 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数$N$. 第二行$N$个整数$A_i$. 输出格式 一个整数表示答案. 样例 样例输入 5 2 9 5 7 0 样例输出 14 数据范围与提示 对于$100%$的数据,$1≤N≤10^5$,$0≤Ai<2^{31}$. 题解 这位朋友,你看这道题这样简洁,必然是很能拓展的题啊. 首先把每个数拆分二进制,从最高位(31位)开始,往0位走,算作一个字符串…
题目链接:传送门 描述在给定的 $N$ 个整数 $A_1, A_2,\cdots,A_N$ 中选出两个进行xor运算,得到的结果最大是多少? 输入格式第一行一个整数 $N$,第二行 $N$ 个整数 $A_1, A_2,\cdots,A_N$. 输出格式一个整数表示答案. 样例输入31 2 3 样例输出3 数据范围与约定对于100%的数据:$N \le 10^5, 0 \le A_i < 2^{31}$. 题解: 由于 $0 \le A_i < 2^{31}$,即二进制下最小是 $31$ 个 $…
题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1472 题目思路:异或是啥呀? 异或就是把两个数字变成位数相同的二进制在同位比较,相同为0,不同为1,如: 011 100 -- 111 所以 3 XOR 4 == 7 那让我们找异或不就是说把一大堆二进制的字符串存起来找嘛 那基本思路就出来了,将数字转变成由 0 和 1组成的字符串,然后找不同 字符串?找不同?那不就是把字典树糊人脸上了嘛 所以这个程序的非主体部分就白给了: 一个是主程序,输入…
题目链接:传送门 思路:建立一个32位的字典树,对每一个要插入的数字查找它异或的最大值(就是尽量全部二进制的值都相反), 然后获得两个数异或的最大值. #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; ][],tot; void Insert(int x) { ,c; ;i>=;i--) { c=(x>>i)&; if(!ch[u][c])…
题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1472 题目描述:在给定的 N 个整数中选出两个进行异或运算,求得到的结果最大是多少. 看到这道题要搞异或,首先想到把它们转成二进制. 那用什么存呢? 这就要用到一个比较NB的算法--字典树了. (对字典树不太了解的可以先看我另一篇博客--https://www.cnblogs.com/wdrdsahudhisjabshdahuhsh/p/16323517.html) 这就是把一堆整数转成2…
描述 在给定的N个整数A1,A2--AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N,第二行N个整数A1-AN. 输出格式 一个整数表示答案. 样例输入 3 1 2 3 样例输出 3 数据范围与约定 对于100%的数据: N<=\(10^5\), 0<=Ai<\(2^{31}\). 题解 看到\(A_i\)最大为\(2^{31}\)很容易想到把数字拆成一个一个数位存进字典树,而为了异或值最大,我们可以想到一个贪心,在求一个数字\(A_i\)与另一个数字\(…
题意:给出A数组,B数组,你可以对A和B分别进行重排列,使得C[i]=A[i]^B[i]的字典序最小. 思路:对于这类题,显然需要建立字典树,然后某种形式取分治,或者贪心.  假设现在有了两颗字典树A,B,显然尽量让同方向的先匹配. 而且同一棵树的左右两边相互不影响,所以可以直接贪:如果A树上出发左走有x个数字,B左走有y个数字,那么一定会左匹配min(x,y):右匹配同理: 剩下的交叉匹配: 看代码应该就会看懂了:add建立字典树. dfs进行匹配:  (i,j)从前往后分别是,(0,0) (…