题意

在给定的 \(N\) 个整数 \(A_1,A_2,…,A_N\) 中选出两个进行异或运算,得到的结果最大是多少?

对于 \(100\%\) 的数据,\(1\le N\le 10^5, 0\le A_i <2^{31}\)

分析

参照jklover的题解。

使用 Trie 树,将每个数看做一个长度为 32 的字符串插入 Trie 树中.

每次插入前贪心找异或最大值即可。

时间复杂度:线性。

代码

询问的时候,要保证至少插入了一个,须要先插入后后询问。这份代码按道理就是错的,ans在进行第一次find的被赋成了x。

#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read()
{
rg T data=0,w=1;
rg char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-') w=-1;
ch=getchar();
}
while(isdigit(ch))
{
data=data*10+ch-'0';
ch=getchar();
}
return data*w;
}
template<class T>il T read(rg T&x)
{
return x=read<T>();
}
typedef long long ll; co int N=32e5+1;
int bin[33],tot;
int son[N][2]; void turn(int n)
{
std::fill(bin+1,bin+33,0);
for(int i=1;i<=32;++i,n>>=1)
bin[i]=n&1;
} int find()
{
int u=0,res=0;
for(int i=32;i>=1;--i)
{
if(son[u][bin[i]^1])
{
u=son[u][bin[i]^1];
res+=(1<<(i-1));
}
else
u=son[u][bin[i]];
}
return res;
} void insert()
{
int u=0;
for(int i=32;i>=1;--i)
{
if(!son[u][bin[i]])
son[u][bin[i]]=++tot;
u=son[u][bin[i]];
}
} int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int n=read<int>(),ans=0;
while(n--)
{
int x=read<int>();
turn(x);
ans=std::max(ans,find());
insert();
}
printf("%d\n",ans);
return 0;
}

LOJ10050 The XOR Largest Pair的更多相关文章

  1. CH1602 The XOR Largest Pair【Trie树】

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

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

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

  3. The XOR Largest Pair(tire树)

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

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

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

  5. The XOR Largest Pair

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

  6. The XOR Largest Pair [Trie]

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

  7. 入门oj 6451: The XOR Largest Pair之二

    Description 今天小W用了1s不到的时候完成了这样一个题:在给定的N个整数 A_1,A_2,-,A_N中选出两个进行异或运算,得到的结果最大是多少?正当他志得意满时,L老师亮出了另一个题:给 ...

  8. 019(The XOR Largest Pair)(字典树)

    题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1472 题目思路:异或是啥呀? 异或就是把两个数字变成位数相同的二进制在同位比较,相同为0,不同为 ...

  9. The XOR Largest Pair (trie树)

    题目描述 在给定的 NN 个整数 A_1,A_2,--,A_NA1​,A2​,--,AN​ 中选出两个进行xor运算,得到的结果最大是多少?xor表示二进制的异或(^)运算符号. 输入格式 第一行输入 ...

随机推荐

  1. 浅析 MySQL Replication(本文转自网络)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

  2. 2018-2019-2 20165114《网络对抗技术》Exp5 MSF基础应用

    Exp5 MSF基础应用 目录 一.实验目标 二.基础问题回答 三.实验过程记录 3.1主动攻击实践 ms08_067+generic/shell reverse_tcp ms17_010_etern ...

  3. React-Native 常用组件学习资料链接

    以下链接是自己开发RN工程时参考的一些不错的资料,给喜欢学习的朋友分享以下. React-Native组件用法详解之ListViewhttp://www.jianshu.com/p/1293bb8ac ...

  4. spring security结合数据库验证用户-XML配置方式

    之前的用户信息我们都是使用的内存用户,测试例子可以,实际中使用肯定不行,需要结合数据库进行验证用户.这就是本节的重点: 项目目录如下:  在之前的项目中的依赖中添加两个依赖: <dependen ...

  5. 一图看懂join、left join、right join、fulljoin间的区别

    INNER JOIN 关键字在表中存在至少一个匹配时返回行. LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配.如果右表中没有匹配,则结果为 NULL. ...

  6. git diff提示filemode发生改变解决办法

    git diff提示filemode发生改变(old mode 100644.new mode 10075) Posted on 2016-11-15 16:55 我是孙海龙 阅读(2292) 评论( ...

  7. Find Min In Rotated Sorted Array2,包含重复数字的反转序列找最小值。

    public int findMin(int[] nums) { return findMin(nums, 0, nums.length - 1); } public int findMin(int[ ...

  8. Java中foreach用法,增强型的for循环的样例和解释

    JDK1.5加入的增强for和循环. 这段时间又回顾了一下JAVA基础 foreach语句使用总结 增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集 ...

  9. 摘录:MINA 框架简介

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(然,也可以提供JAVA 对象的序列化服务.虚拟机管道通信服务等),Mi ...

  10. 用Java编程计算兔子生兔子的问题

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 这是一个典型的Fibonacci数列问 ...