题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1472

题目思路:异或是啥呀?

异或就是把两个数字变成位数相同的二进制在同位比较,相同为0,不同为1,如:

011

100

——

111

所以 3 XOR 4 == 7

那让我们找异或不就是说把一大堆二进制的字符串存起来找嘛

那基本思路就出来了,将数字转变成由 0 和 1组成的字符串,然后找不同

字符串?找不同?那不就是把字典树糊人脸上了嘛

所以这个程序的非主体部分就白给了:

一个是主程序,输入 n,输入 n 个 x,存起来

一个是存储,用 (x>>k)&1 把每一位倒腾出来再用字典树的方式存储

注意!异或的解释里有“位数相同”这几个字

所以要在前面用 0 补齐,它说了“小于 2^31 "和“小于 10^5 ”,所以横坐标开到 32*100000+1 就足够

接下来就是程序的主体部分:搜索,我应该如何找到那两个凑起来最大的串串呢

首先我可以先敲定一个字符串,然后再上树里找去

但是那两个答案串本就无法确定,那直接一个一个定得了

所以在主程序里面每存一个 x 就要假定这个 x 为其中一个答案串去寻找

还是用 (x>>k)&1 把每一位倒腾出来然后一位一位搞

如果说它的对位,也就是那个存 !((x>>k)&1) 的地方有东西

也就是说平白无故多个1出来

行了,把 1 以正确的位置存进ans(即 k ),然后那个我们对位的串就是第二个答案串了

凑凑凑出来一个 ans,打回去,和其他的一众 ans 比比,找那个“力拔山兮气盖世”的

最后输出

注意!从最高位开始,性价比最高

#include<bits/stdc++.h>
using namespace std;
int trie[3200001][3],tot=1,ans=-10000,n,x,i;
void putin(int x){
int p=1,k,t;
for(k=30;k>=0;k--){
//注意,从最高位开始
t=(x>>k)&1;//把每一位导出来
if(trie[p][t]==0){
trie[p][t]=(++tot);
}
p=trie[p][t];
}//以字典树的方式存储
}
int finding(int x){//核心程序
int ans=0,p=1,k;
//ans初始值必须等于0
//不然出来什么“野1”不好解释
for(k=30;k>=0;k--){
//注意,从最高位开始
int t=(x>>k)&1;//一位一位导
if(trie[p][!t]){
//对位有人
ans=ans|(1<<k);
//按正确的位置存1
p=trie[p][!t];
//将其视为第二个答案串
}
else{//什么?难办?
p=trie[p][t];
//那就别办了
}
}
return ans;//打回去
}
int main(){
scanf("%d",&n);//n
for(i=0;i<n;++i){//n个数字
scanf("%d",&x);//输进去
putin(x);//存了它
ans=max(ans,finding(x));
//找那个最大的
}
printf("%d",ans);//打出来
return 0;
}


题目总结:新知识点:看到位运算可以往字符串方面想想

019(The XOR Largest Pair)(字典树)的更多相关文章

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

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

  2. The XOR Largest Pair(tire树)

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

  3. CH1602 The XOR Largest Pair【Trie树】

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

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

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

  5. 字典树-THE XOR largest pair

    题目:给你n个数字A1,A2....An ,问从中选出两个数字异或运算得到的最大结果是多少 0<=Ai<231 用字典树,记录每个数字的31位2进制01串(int 为4个字节,每个字节8个 ...

  6. The XOR Largest Pair(Tire字典树应用)

    题目链接:传送门 思路:建立一个32位的字典树,对每一个要插入的数字查找它异或的最大值(就是尽量全部二进制的值都相反), 然后获得两个数异或的最大值. #include<iostream> ...

  7. 题解0014:信奥一本通1472——The XOR Largest Pair(字典树)

    题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1472 题目描述:在给定的 N 个整数中选出两个进行异或运算,求得到的结果最大是多少. 看到这 ...

  8. HDU--5269 ZYB loves Xor I (字典树)

    题目电波: HDU--5269 ZYB loves Xor I 首先我们先解决 ai xor aj 每个数转化为二进制  我们用字典树统计 每个节点 0 和 1 的出现的个数 #include< ...

  9. HDU 5715 XOR 游戏 二分+字典树

    XOR 游戏 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5715 Description 众所周知,度度熊喜欢XOR运算(XOR百科). 今天,它 ...

随机推荐

  1. EntityFramwork常见问题

    1.常用的语句有哪些 添加migration      dotnet ef migrations add [MIgrationName] 删除刚添加的migration      dotnet ef ...

  2. 排序算法详解(java代码实现)

    ​ 排序算法大致分为内部排序和外部排序两种 内部排序:待排序的记录全部放到内存中进行排序,时间复杂度也就等于比较的次数 外部排序:数据量很大,内存无法容纳,需要对外存进行访问再排序,把若干段数据一次读 ...

  3. 使用 Python 来自动回微信

    准备 Python3 Python Itchat库(可以通过pip install itchat来安装) (可选)Python Pymongo库(可以通过pip install pymongo来安装) ...

  4. Linux系统inodes资源耗尽问题

    1 inodes介绍 Linux系统下文件数据储存在"块"中,文件的元信息,例如文件的创建者.文件的创建日期.文件的大小等.这种储存文件元信息的区域就叫做inode,中文译名为&q ...

  5. SQL连接查询优化[姊妹篇.第五弹]

    上篇的sql优化篇章,更多偏向于优化的思想概念,先前抛出的4个优化问题中,篇幅过长,只对前两个问题进行了解析. 接下来我们一起来谈谈sql的连接查询优化,更偏向于实际运用,并对如下两个问题进行探讨.篇 ...

  6. mybatis plus 增删改自动填充字段值

    说明 本文实现以下需求效果 创建数据时自动填充 createUserId 和 createTime 更新数据时自动填充 updateUserId 和 updateTime(每次修改都自动填充新的 up ...

  7. c++ web框架实现之静态反射实现

    0 前言 最近在写web框架,框架写好后,需要根据网络发来的请求,选择用户定义的servlet来处理请求.一个问题就是,我们框架写好后,是不知道用户定义了哪些处理请求的类的,怎么办? 在java里有一 ...

  8. 好客租房2-React概述

    1.1什么是react React是一个用于构建用户界面的javascript库 用户界面:HTML页面 React主要用来HTML 或者沟通构建web应用 如果从MVC的角度来看 react仅仅是从 ...

  9. ML第5周学习小结

    本周收获 总结一下本周学习内容: 1.学习了<深入浅出Pandas>的第五章:Pandas高级操作的两个内容 数据迭代 函数应用 我的博客链接: pandas:数据迭代.函数应用 2.&l ...

  10. SAM[详细~bushi]

    基础性质概念 后缀自动机:S的SAM是个DAG,每个节点叫状态,每条带字符ch边表示+ch转移,从开始节点往下,任何一条路径都会对应一个S的子串. 不过为什么要叫"后缀"自动机呢? ...