入门oj 6451: The XOR Largest Pair之二
Description
在给定的N个整数 A_1,A_2,…,A_N中选出两个进行异或运算,得到的结果最大是多少?
正当他志得意满时,L老师亮出了另一个题:
给你1000个数字a1到a1000,从其中选出三个数字ai,aj,ak
(1<=i,j,k<=1000,且i,j,k互不相同)
满足(ai+aj)xor ak的值最大
小W顿时迷茫了.........
Input
Output
Sample Input
4
1
2
3
4
Sample Output
7
HINT
(1+2)xor4=7
sol
trie题
具体做法:
1把每一个数字转为二进制,放入一个trie
2枚举每两个数的和,枚举一遍,因为是做异或运算,所以可以从高位往地位取(越高越好)
你会发现选的数字是不能重复的,所以要先把选的数从trie里面删掉
代码如下:
#include<cstring>
#include<iostream>
using namespace std;
const long long maxn=1e5+10;
long long a[310001][11],tot,sum[1001],End[maxn],ans;
char str[maxn];
void ins(long long str,long long vol)//如果vol==1 就是把一个数加进来,反之,就是删去那个数
{
long long p=0;
for(long long i=31;i>=0;i--)
{
long long l=(str>>i)&1;
if(!a[p][l])
a[p][l]=++tot;
p=a[p][l];
End[p]+=vol;
}//trie模板,不会自学
}
long long find(long long str)
{
long long p=0;
long long ans=0;
for(long long i=31;i>=0;i--)
{
long long l=(str>>i)&1;//算出第i位是几
if(a[p][l^1]) ans=ans<<1|1,p=a[p][l^1];
else ans=ans<<1,p=a[p][l];//ans=ans<<1|1相当于在ans=ans<<1的第i位加1
}
return ans;
} int main(){
long long n,m;
cin>>n;
tot=0;
for(long long i=1;i<=n;i++)
cin>>sum[i],ins(sum[i],1);
for(long long i=1;i<=n;i++)
for(long long j=i+1;j<=n;j++){
ins(sum[i],-1);
ins(sum[j],-1);//删除
ans=max(ans,find(sum[i]+sum[j]));
ins(sum[i],1);
ins(sum[i],1);//再加回来
} cout<<ans;
return 0;
}
外送一个网址http://begin.lydsy.com/JudgeOnline/discuss3/thread.php?tid=735
入门oj 6451: The XOR Largest Pair之二的更多相关文章
- 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树)
题目 The XOR Largest Pair 解析 一年前听学长讲这道题,什么01trie,好高级啊,所以没学,现在一看.... 看到xor就应该想到二进制,一看数据\(A_i< 2^{31} ...
- CH 1602 - The XOR Largest Pair - [字典树变形]
题目链接:传送门 描述在给定的 $N$ 个整数 $A_1, A_2,\cdots,A_N$ 中选出两个进行xor运算,得到的结果最大是多少? 输入格式第一行一个整数 $N$,第二行 $N$ 个整数 $ ...
- The XOR Largest Pair
刷刷书上的例题 在给定的N个整数A1,A2……An中选出两个进行XOR运算,得到的结果最大是多少?N<=105,0<=Ai<231 SOlution: 我们思考到对于两个数相异或,是 ...
- The XOR Largest Pair [Trie]
描述 在给定的N个整数A1,A2--AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N,第二行N个整数A1-AN. 输出格式 一个整数表示答案. 样例输入 3 1 2 3 ...
- 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个 ...
随机推荐
- Python音视频开发:消除抖音短视频Logo和去电视台标
☞ ░ 前往老猿Python博文目录 ░ 一.引言 对于带Logo(如抖音Logo.电视台标)的视频,有三种方案进行Logo消除: 直接将对应区域用对应图像替换: 直接将对应区域模糊化: 通过变换将要 ...
- PyQt(Python+Qt)学习随笔:QListWidget获取指定项对应行的row方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListWidget的row方法通过项作为参数,获取到对应项所在行的行号,语法如下: int ro ...
- PyQt(Python+Qt)学习随笔:Designer中PushButton按钮default、atuoDefault属性
引言 1.default.atuoDefault属性仅在父窗口为对话窗才生效,其他窗口类型设置这两个属性没有意义: 2.按钮的按压触发除了鼠标键之外,也可以使用回车键和空格键触发,这两个属性正是控制回 ...
- 理解js浅拷贝和深拷贝
理解深拷贝和浅拷贝之前先了解下js中的基本类型和引用类型 1.基本类型: 在js中,数据的基本类型undefined,null,string,number,boolean,在变量中赋的实际值,基本类型 ...
- 沪苏浙皖共同打造区块链数字经济发展高地,Panda Global表示区块链真的来了!
近日,在长三角一体化发展重大合作事项签约仪式上,沪苏浙皖经信部门共同签约,推进长三角区块链数字经济一体化发展,共同打造数字经济发展高地.从此次签约活动也能看出来,区块链数字现金的发展已经得到了认可,早 ...
- 【SDOI2017】相关分析(线段树)
Description 你需要维护一个长度为 \(n\) 的实数对的序列,第 \(i\) 个元素为 \((x_i, y_i)\).现有 \(m\) 次操作: \(\texttt{1 L R}\):设区 ...
- 设置定时任务用rman删除归档日志脚本
之前使用数据库数据迁移过程中出现产生大量归档日志的情况(由于迁移的目标库是DG,必须开启归档). 为避免出现归档空间爆掉的情况,设置定时任务删除系统当前时间30分钟前的归档日志,脚本如下: cat d ...
- SpringBoot整合RabbitMQ实践教程
1. MQ MQ(Message Queue),消息队列,是生产者和消费者模型中传递信息的容器,主要用于线程或进程之间通信. MQ主要的应用场景为:应用解耦.异步处理,流量削锋,日志处理等. ...
- 目前市面上比较流行的devops运维平台汇总
1,spug 1,Spug简介 Spug是面向中小型企业设计的无 Agent的自动化运维平台,整合了主机管理.主机批量执行.主机在线终端.应用发布.任务计划.配置中心.监控.报警等一系列功能.演示地址 ...
- 算法(Java实现)—— 二分搜索算法
二分搜索算法 有序数列才可用二分查找算法 思路分析 思路分析 首先确定该数组的中间下标mid = (left + right)/ 2 然后让需要查找的数findVal和arr[mid]比较 findV ...