最大异或对(字典树)
时间:2022-07-28
本文章向大家介绍最大异或对(字典树),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意描述
在给定的N个整数A1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少?
输入格式 第一行输入一个整数N。
第二行输入N个整数A1~AN。
输出格式 输出一个整数表示答案。
数据范围 1≤N≤105, 0≤Ai<231 输入样例: 3 1 2 3 输出样例: 3
思路
这道题的思路非常巧妙,可以用trie树来很快的解决这个问题。想要异或值最大,那么从某一数的二进制最高位开始,如果存在与该位不同的数,则取该数,否则就继续顺着这个结点走下去。因为题目规定数据范围是231,所以将数字转为31位的二进制,然后再遍历即可。
AC代码
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=1e5+10;
const int maxm=31*1e5+10;
int a[maxn],son[maxm][2],idx=0;
void insert(int u){
int p=0;
for(int i=30;i>=0;i--){
int t=u>>i&1;
if(!son[p][t]) son[p][t]=++idx;
p=son[p][t];
}
}
int query(int u){
int p=0,res=0;
for(int i=30;i>=0;i--){
int t=u>>i&1;
//如果存在与t相反的话,就走着一条
if(son[p][!t]){
p=son[p][!t];
res=res*2+!t;
}else{//否则就走唯一存在的一条
p=son[p][t];
res=res*2+t;
}
}
return res;
}
int main(){
int n;
int ans=0;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++){
insert(a[i]);
ans=max(ans,query(a[i])^a[i]);
}
cout<<ans<<endl;
}
- 数值信息的机器级存储
- ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
- Golang语言社区--golang 进度下载文件
- Golang语言社区--Go语言基础第七节函数调用等
- Hyperledger也能实现Token代币
- 经典Java面试题收集(二)
- 关于表联结方法(一)(r3笔记第57天)
- Go 语言读写 Excel 文档
- 关于索引的使用模式(r3笔记56天)
- 关于oracle中的半连接(r3笔记55天)
- 关于正则表达式第三篇(r3笔记第52天)
- 关于正则表达式第四篇(r3笔记第53天)
- 外部表简单总结(r3笔记第51天)
- 通过shell脚本监控sql执行频率(r3笔记第50天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言中的偏最小二乘PLS回归算法
- R如何与Tableau集成分步指南
- 漏洞复现 | CVE‐2020‐5902踩坑记
- PCA图显示分组无差异,怎么办?
- 我接手了一个“垃圾”系统,全栈优化后将性能提升了350倍
- 用 eggnog-mapper 进行功能注释
- 将SAP C4C Custom BO使用ABSL编写的逻辑通过OData服务暴露出去
- Linux笔记(14)| 字符设备驱动基础入门(续)
- scRNAseq包更新动作太大
- Linux笔记(13)| 字符设备驱动基础入门
- 你要的rmarkdown文献图表复现全套代码来了(单细胞)
- 祖传的单个10x样本的seurat标准代码
- 浏览器输入某URL后,HTTP开启了一段奇妙之旅!
- 【Pytorch】笔记一:数据载体张量与线性回归
- 为什么我不再用Redux了