2017西安交大ACM小学期 有趣异或[Trie树]

有趣异或

发布时间: 2017年7月4日 23:59   最后更新: 2017年7月5日 14:56   时间限制: 1500ms   内存限制: 512M

给定n个非负整数,保证这些数两两不相同。现给定x,请从中选2个不同的数a,b,使得a^b^x最大。

包含多组测试数据。
每组测试数据第一行有1个正整数和1个非负整数,分别为nx
接下来一行有n个正整数。
所有数据满足n106,所有非负整数以及x小于等于109
总数据量n106

对每组数据输出一行1个整数,表示a^b^x的最大值是多少。

 复制
3 0
1 2 3
3

首先,我们把所有的整数对应的二进制前面补0,补成30位的二进制数,然后把这串二进制数当成字符串,存入Trie树中。

其次,我们遍历所有的数a,然后我们寻找b,使得a^b^x最大

我们这样分析,当a和x确定时候a^x也就确定了设a^x = t

那么欲使t^b最大,那么t与b的相同的位上,值应该尽可能的不同,所以,我们依据t的位,在Trie中寻找b。。。

这里有一个坑点,那就只注意a和b不能相同,如果数据是x = (1111111....)b的话,那么朴素的求会找到与a相等的b,这显然是错误的

因此,可以用一个标记,代表当前搜索到的Trie树位置是否可能得到与a相等的b,搜索时候注意就好了。

代码:


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX = 1e6+7;
int n,x;
int a[MAX];
struct trie
{int count;trie* child[2];
};
trie* root;
void build(int num){trie* p = root;for(int i = 29;i >= 0;i--){int key = (num>>i) & 1;if(!p -> child[key]){trie* nt = new trie;nt -> count = 1;nt -> child[0] = nt -> child[1] = 0;p -> child[key] = nt;p = nt;}else{p = p -> child[key];p -> count ++;}}
} 
int find(int a){int res = 0;trie* p = root;int able = 1;for(int i = 29;i >= 0;i--){int f = (x>>i) & 1;if(f){int key = (a>>i) & 1;if(!p->child[key]) {//没有相同位 able = 0;key ^= 1; }else{//有相同位 if(!able){//已经不可能.直接选 res |= (1<<i); }else{//还可能 if(p->child[key]->count-1 == 0){//不能选able = 0;key ^= 1; }else{//可以选// todo	res |= (1<<i);		 }}}p = p -> child[key];}else{//最好不同   int key = (a>>i) & 1 ^ 1;//key 为理想  if(p->child[key]){//有不同位 able = 0;res |= (1<<i);}else{//只有相同位 key ^= 1;}p = p -> child[key];}}return res;
}
int main(){while(~scanf("%d%d",&n,&x)){int ma = 0;root = new trie;root -> count = 0; root -> child[0] = root -> child[1] = 0;for(int i = 0;i < n;i++){scanf("%d",&a[i]);build(a[i]);}for(int i = 0;i < n;i++){ma = max(ma,find(a[i]));}printf("%d\n",ma);}return 0;
} 



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P5675-[GZOI2017]取石子游戏【博弈论,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P5675 题目大意 nnn堆石子&#xff0c;第iii堆有aia_iai​个。指定一些石子堆使得先手必胜并指定一个先手第一个取的位置使得先手必败&#xff0c;求有多少方案数。 解题思路 根据NIMNIMNIM游戏&#xff0c;只要石子数异或和…

39、JAVA_WEB开发基础之ajax和json

ajax是什么 首先要知道ajax并不是一种新的技术&#xff0c;而是几种技术的强强联合&#xff0c;全称是Asynchronous Javascript and xml&#xff0c;其精髓在于异步加载资源&#xff0c;因此可以实现局部加载效果&#xff08;因为可以异步加载&#xff0c;所以不需要依靠整张页…

(不误正业)鼓励做题的时间陷阱

前言 在家闲的无聊想着没人陪我做题就写了一个可以(或许)鼓励做题的东西 正题 关于时间陷阱 时间陷阱是种游戏类型&#xff0c;玩家开始时有一个倒计时&#xff0c;没完成一个任务会增加倒计时&#xff0c;时间到了那么任务就输了。 这里编写的时间陷阱任务重要度(完成后加的…

2017西安交大ACM小学期 美妙音乐[差分KMP匹配]

美妙音乐 发布时间: 2017年7月3日 13:14 最后更新: 2017年7月5日 13:47 时间限制: 500ms 内存限制: 128M 描述 一段音乐是由若干个音符组成的&#xff0c;音乐中的某段音符称为旋律。给定一首音乐&#xff0c;问某个旋律出现了多少次。注意&#xff1a; &#xff08;1&am…

1、数据库简介

数据库是什么 数据库是一种用来存储数据的仓库&#xff0c;是一种高效存储和处理数据的介质&#xff08;载体&#xff09;。我们通常口中所说的数据库指的是数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;是一种用于方便管理数据库的软件。 数据库的分类 根据存储…

P2387-[NOI2014]魔法森林【LCT】

前言 话说LCTLCTLCT的SplaySplaySplay和平时写的SplaySplaySplay差别好大&#xff0c;调了我半天 正题 题目链接:[https://www.luogu.com.cn/problem/P2387 题目大意 nnn个点mmm条边有a,ba,ba,b两个值&#xff0c;求一条路径从1−>n1->n1−>n使得路径上最大的aaa加上…

2017西安交大ACM小学期 敏感词汇[AC自动机]

敏感词汇 发布时间: 2017年7月5日 00:23 最后更新: 2017年7月6日 14:40 时间限制: 1500ms 内存限制: 128M 描述 我们知道&#xff0c;在进行聊天时&#xff0c;有些词汇是敏感词汇&#xff0c;含有敏感词汇的内容是不允许被发送的。现在给定m个敏感词汇&#xff0c;并给定…

2、安装和连接mysql

安装mysql 1、官网下载mysql 下载网址&#xff1a;https://www.mysql.com/ 2、解压并配置mysql 解压下载的&#xff08;前提下载的zip版本的mysql&#xff09;mysql安装包&#xff0c;放到指定磁盘 配置环境变量&#xff1a;将mysql下的bin目录的全路径名配置到环境变量的p…

51nod-诺德街【数学期望】

正题 题目链接:http://www.51nod.com/Contest/Problem.html#contestProblemId305 题目大意 nnn个商铺&#xff0c;第iii个商铺有pip_ipi​的概率营业&#xff0c;一个人从111走到nnn再走回来一直重复&#xff0c;如果走到没有人营业的商铺那么就结束。 求期望走多少个商铺后停…

ACM一类方程问题的求解[最短路建模] bzoj2118

在ACM生涯里已经预见两回判断这种方程是否有解、有几个解的问题了。 例如&#xff1a; 1 给定非负整数a,b,c,n&#xff0c;请判断axbyczn是否存在(x,y,z)均为非负整数的解 题目链接&#xff1a;http://oj.xjtuacm.com/contest/14/problem/124/ 再例如&#xff1a; 2 现有…

3、数据库中的字符集和校对集

字符集 字符集指的就是存储数据到硬盘时用到的编码方式&#xff0c;mysql中操作字符集的基本sql如下&#xff1a; show character set; -- 查看服务器支持哪些字符集 show variables like ‘character_set%’; -- 查看服务器对外处理的默认字符集 set character_set_clien…

P3810-[模板]三维偏序(陌上花开)【CDQ分治,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3810 题目大意 nnn个三元组(a,b,c)(a,b,c)(a,b,c)&#xff0c;f(i)∑i1n,j≠i[aj≤ai&bj≤bi&bj≤bi]f(i)\sum_{i1}^{n,j\neq i}[a_j\leq a_i\&b_j\leq b_i\&b_j\leq b_i]f(i)i1∑n,j​i​[aj​≤ai​&…

4、mysql数据库的权限管理

权限管理指的是对试图连接和操作数据库服务器的用户进行访问控制 关于权限管理的一些sql实例如下&#xff1a; -- 首先通过cmd窗口连接mysql服务器 mysql -u root -p *******-- mysql数据库下有一个user表&#xff0c;里边存储的是user的信息 select user from user;-- 添加一…

P3157-[CQOI2011]动态逆序对【CDQ分治,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3157 题目大意 一个长度为nnn序列&#xff0c;每次删除一个数&#xff0c;求删除前的逆序对数量。 解题思路 时光倒流之后&#xff0c;我们变为每次加入一个数求逆序对数量。 我们将加入一个数的贡献分为后面和前面两部分…

5、mysql中的库操作

对数据库的操作包括对数据库的增、删、改、查 接下来介绍一下基本的sql语句 -- 创建数据库 create database 数据库名称 字符集&#xff08;charset utf8&#xff09;; create database czpdb charset urf8; -- czpdb 数据库在磁盘中就是一个文件夹&#xff0c;它下边的db.op…

P5887-Ringed Genesis【GCD】

正题 题目链接:https://www.luogu.com.cn/problem/P5887?contestId24709 题目大意 nnn个洞围成一个环&#xff0c;兔子每次会往前跳kkk个洞&#xff0c;mmm只兔子给出其实位置&#xff0c;求有多少个洞不会被经过。 解题思路 我们可以发现kxnyckxnyckxnyc&#xff0c;有c∣g…

Network of Schools POJ - 1236 tarjan强连通分量缩点

A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a list of schools to which it distributes software (the “receiving schools”). Note that if B is in the distribution list of…

6、mysql中字段

对数据表的操作是比较重要的&#xff0c;在实际开发中&#xff0c;日常做的主要工作就是对数据表的操作 对数据表的操作分为两大部分&#xff1a;操作数据表的结构、操作数据表中的数据 组成数据表的基本单元就是字段&#xff0c;所以&#xff0c;接下来先介绍一下mysql中的字…

bzoj3732-Network【Kruskal重构树模板】

正题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id3732 题目大意 一张图&#xff0c;每次询问两个点&#xff0c;求这两个点之间路径的最大值的最小是多少。 解题思路 构造一颗KruskalKruskalKruskal重构树然后就是模板了。 codecodecode #include<cstd…

在Linux环境下使用Apache部署ASP.NET Core

在前几篇文章中我们一起探讨了如何在Linux环境中安装ASP.NET Core运行时环境及将ASP.NET Core项目部署在Jexus中&#xff0c;这篇文章中我们将探讨如何将ASP.NET Core部署于Apache&#xff08;阿帕奇&#xff09;中。 很幸运能够和大家一起学习和探讨ASP.NET Core本文章运行…