The XOR Largest Pair(tire树)
题目
解析
一年前听学长讲这道题,什么01trie,好高级啊,所以没学,现在一看。。。。
看到xor就应该想到二进制,一看数据\(A_i< 2^{31}\),考虑把所有的数都处理成长度为32的二进制数,插入字典树中,查询的时候就逐位比较,有不同的先走不同的那边,这样保证了每次插入一个数时查询的结果是最大的,然后不断更新最大值就可以了
我这种不用位运算的懒人就直接用bitset维护了
从高位到地位插入可能好算一些
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 4e6 + 10;
int n, a, num, ans;
struct node {
int nx[2];
} e[N];
void insert(int n) {
bitset<35>s(n);
int rt = 0;
for (int i = 30; i >= 0; --i) {
int v = (int)s[i];
if (!e[rt].nx[v]) e[rt].nx[v] = ++num;
rt = e[rt].nx[v];
}
}
int query(int x) {
bitset<35>s(x);
int rt = 0, ret = 0;
for (int i = 30; i >= 0; --i) {
int v = (int)s[i];
if (e[rt].nx[v ^ 1]) ret = ret << 1 | 1, rt = e[rt].nx[v ^ 1];
else ret <<= 1, rt = e[rt].nx[v];
}
return ret;
}
int main() {
cin >> n;
for (int i = 1, x; i <= n; ++i) {
cin >> x;
ans = max(ans, query(x));
insert(x);
}
cout << ans;
}
The XOR Largest Pair(tire树)的更多相关文章
- CH 1602 - The XOR Largest Pair - [字典树变形]
题目链接:传送门 描述在给定的 $N$ 个整数 $A_1, A_2,\cdots,A_N$ 中选出两个进行xor运算,得到的结果最大是多少? 输入格式第一行一个整数 $N$,第二行 $N$ 个整数 $ ...
- CH1602 The XOR Largest Pair【Trie树】
1602 The XOR Largest Pair 0x10「基本数据结构」例题 描述 在给定的N个整数A1,A2……AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N, ...
- 「LOJ#10050」「一本通 2.3 例 2」The XOR Largest Pair (Trie
题目描述 在给定的 $N$ 个整数 $A_1,A_2,A_3...A_n$ 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数$N$. 第二行$N$个整数$A_i$. 输出格式 ...
- The XOR Largest Pair(Tire字典树应用)
题目链接:传送门 思路:建立一个32位的字典树,对每一个要插入的数字查找它异或的最大值(就是尽量全部二进制的值都相反), 然后获得两个数异或的最大值. #include<iostream> ...
- 019(The XOR Largest Pair)(字典树)
题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1472 题目思路:异或是啥呀? 异或就是把两个数字变成位数相同的二进制在同位比较,相同为0,不同为 ...
- The XOR Largest Pair (trie树)
题目描述 在给定的 NN 个整数 A_1,A_2,--,A_NA1,A2,--,AN 中选出两个进行xor运算,得到的结果最大是多少?xor表示二进制的异或(^)运算符号. 输入格式 第一行输入 ...
- 字典树-THE XOR largest pair
题目:给你n个数字A1,A2....An ,问从中选出两个数字异或运算得到的最大结果是多少 0<=Ai<231 用字典树,记录每个数字的31位2进制01串(int 为4个字节,每个字节8个 ...
- 题解0014:信奥一本通1472——The XOR Largest Pair(字典树)
题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1472 题目描述:在给定的 N 个整数中选出两个进行异或运算,求得到的结果最大是多少. 看到这 ...
- The XOR Largest Pair(字典树)
题目描述 在给定的 N 个整数 A1,A2,-,AN 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数 N. 第二行 N 个整数 Ai. 输出格式 一个整数表示答案. 样例 ...
随机推荐
- java对象生成随意属性值
public class RandomObjectValue { public static <T> T getObject(Class<?> clazz) { T t = n ...
- .Net Core3 新特性整理
.net core 3实现了.net 标准2.1. 1.生成可执行文件 以前版本需要dotnet run运行项目,.net core 3支持直接生成目标平台的可执行文件.比如windows就是exe了 ...
- 真机调试No target device的解决(android studio)3.4.1
驱动等都正常,手机连接正常.但是还是报错 搜索到如下办法成功解决:adb未启动或启动失败,这时候选择android studio界面底端的logcat,会自动重启adb.
- Linux安装fcitx输入法(命令安装)
Linux安装fcitx输入法(命令安装) 打开终端安装输入法 sudo apt-get install im-switch libapt-pkg-perl fcitx fcitx-table-w ...
- C# INI配置文件读写类
ini是一种很古老的配置文件,C#操作ini文件借助windows底层ini操作函数,使用起来很方便: public class IniHelper { [DllImport("kernel ...
- Network Lock Manager Protocol (NLM)
资料来源 https://wiki.wireshark.org/Network_Lock_Manager 目的 The purpose of the NLM protocol is to provid ...
- LeetCode 100. Same Tree (判断树是否完全相同)
100. Same Tree Given two binary trees, write a function to check if they are the same or not. Two bi ...
- Spark sql -- Spark sql中的窗口函数和对应的api
一.窗口函数种类 ranking 排名类 analytic 分析类 aggregate 聚合类 Function Type SQL DataFrame API Description Ranking ...
- flash逆向练习:以逆向的方式通关flash游戏《谈判专家》
一.缘起 无聊想玩搜个游戏玩,看到一个帖子引起了我的好奇: 但是作者分享的游戏链接已经挂掉了,于是就搜索了一下: 选了7k7k上的一个在线玩,链接:http://www.7k7k.com/swf/15 ...
- vim、vi 快捷键
普通模式 移动光标 nj.nk 上下移动n行 nb.nw 前后移动n个单词 nh.nl 左右移动n个字符 L 移到屏幕的最后一行 M 移到屏幕的中间一行 H 移到屏幕的第一行 nG 移到文件第n行 G ...