2014百度之星资格赛—— Xor Sum(01字典树)
Xor Sum
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)
Total Submission(s): 0 Accepted Submission(s): 0
每组数据的第一行输入两个正整数N,M(<1=N,M<=100000),接下来一行,包括N个正整数。代表 Zeus 的获得的集合,之后M行。每行一个正整数S,代表 Prometheus 询问的正整数。全部正整数均不超过2^32。
对于每一个询问。输出一个正整数K。使得K与S异或值最大。
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct tire{
__int64 w; //从根节点到该结点的
struct tire *next[2]; //每一个节点以下可能有2个数,0和1
}tree,*tiretree; /* 字典树的存储结构 */
tiretree T;
void insert(__int64 a) //把a的32位二进制码插入到字典树中
{
int i;
tiretree q,p;
q=T;
for(i=31;i>=0;i--)
{
if(!(a&1<<i)) //若为0就插入到第一个子结点,a的32位二进制码是按高位往地位从根节点到叶子结点存放的;
{
p=q->next[0];
if(p==NULL) //假设该二进制数应该在的位置为空,则将二进制数插入到该位置
{
p=(tiretree)malloc(sizeof(tree));
p->next[0]=NULL;
p->next[1]=NULL;
if(i==0) //若a结点达到叶子节点,就把a存到叶子结点中;
p->w=a;
else
p->w=0; //若为a的中间经过结点,则不赋值。即字典树中仅仅有叶子结点有数字。其余结点都为0;
q->next[0]=p;
}
q=p;
}
else
{
p=q->next[1]; //若为1就插入到第二个子结点。
if(p==NULL)
{
p=(tiretree)malloc(sizeof(tree));
p->next[0]=NULL;
p->next[1]=NULL;
if(i==0)
p->w=a;
else
p->w=0;
q->next[1]=p;
}
q=q->next[1]; //假设该二进制应该在的位置不空。则继续比較下一个二进制
}
}
}
__int64 find(__int64 a) // 对于随意非负整数x,能够沿着树根往下贪心找到y,使得a异或y最大,复杂度为树的深度。 {
int i;
tiretree q;
q=T;
for(i=31;i>=0;i--)
{
if(q->next[0]==NULL)
q=q->next[1];
else
if(q->next[1]==NULL)
q=q->next[0];
else
if((a&1<<i)==0)
q=q->next[0];
else
q=q->next[1];
}
return q->w;
}
int main()
{
int n,i,p,TT,count=0;
__int64 max,a,m,q;
scanf("%d",&TT);
while(TT--)
{
scanf("%d %d",&n,&p);
delete(T);
T=(tiretree)malloc(sizeof(tree)); //构造单个根结点
T->next[0]=NULL;
T->next[1]=NULL;
T->w=0;
max=0;
for(i=0;i<n;i++)
{
scanf("%I64d",&a);
insert(a); //分别把集合中的每一个数插入到树中
}
for(i=0;i<p;i++)
{
scanf("%I64d",&q);
m=~q; //然后把要比較的数取反后,与字典树中存的数进行比較
if(i==0)
printf("Case #%d:\n",++count);
printf("%I64d\n",find(m));
}
}
return 0;
}
2014百度之星资格赛—— Xor Sum(01字典树)的更多相关文章
- Xor Sum 01字典树 hdu4825
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- HDU-4825 Xor Sum,字典树好题!
Xor Sum 一遍A了之后大呼一声好(keng)题!debug了两小时~~~~百度之星资格赛,可以. 题意:给你一个n个元素的数组,m次查询,每次输入一个数k要求从数组中找到一个数与k异或值最大,输 ...
- HDU 4825 Xor Sum(字典树)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 这道题更明确的说是一道01字典树,如果ch[u][id^1]有值,那么就向下继续查找/ ...
- 2014百度之星资格赛——Disk Schedule
2014百度拥有明星格比赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取. 为了提高效率.须要人为安排磁盘读取. 然而.在 ...
- HDU-4825 Xor Sum(字典树求异或最大值)
题目链接:点此 我的github地址:点此 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整 ...
- HDU4825 Xor Sum(字典树解决最大异或问题)
Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整 ...
- 2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)
Energy Conversion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2014百度之星资格赛 1004:Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- NBUT 1525 Cow Xor(01字典树+前缀思想)
[1525] Cow Xor 时间限制: 2000 ms 内存限制: 65535 K 问题描述 农民约翰在喂奶牛的时候被另一个问题卡住了.他的所有N(1 <= N <= 100,000)个 ...
随机推荐
- CSDN--十年
昨天获得了博客专家的勋章,惊喜总是来的有点意外.这个勋章也算是来的一波三折.借着这个机会,回首一下我在CSDN的博客历史. 这个博客如今可查的最早的文章,是04年下半年写的,事实上之前应该另一些自己写 ...
- 启用QNX系统,海尔智能冰箱或成业界“宝马”
智能家电正处于迅猛发展的态势,国内眼下有非常多企业都在积极布局智能家电,当中又以海尔最为典型.作为家电领域的领头羊,海尔近年来在智能家电领域的动作不小.近期有消息透露.海尔也许会在IFA展会上 ...
- IOS之UITableView——怎样刷新父页面的Cell
问题:评论数同步 在社交相关的项目中常常有这种主页面,主列表的Cell中有赞数.评论数,详情页顶部也是相同的一个Cell,下部有评论列表,评论添加或降低.详情页的评论数随之改变,返回主列表,主列表的相 ...
- Chrome下使用百度地图报错Cannot read property 'minZoom' of undefined
问题:工作中在Google chome下面的js console里面测试百度地图API var map = new BMap.Map("container"); map.cente ...
- CZLayer的阴影
CALayer有一个shadow属性 意思是阴影 shadowcolor //颜色 shadowoffset //偏移 shadowOpacity //透明度 layer有一个方法 mas ...
- SQL语句之Group By
1. Group By 语句简介: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若 ...
- POJ 3134 Power Calculus ID-DFS +剪枝
题意:给你个数n 让你求从x出发用乘除法最少多少步算出x^n. 思路: 一看数据范围 n<=1000 好了,,暴搜.. 但是 一开始写的辣鸡暴搜 样例只能过一半.. 大数据跑了10分钟才跑出来. ...
- innerHTML 与 outerHTML区别
示例代码: <div id="test"> <p>这是innerHTML</p> <p>这是innerHTML</p> ...
- 粘包_Client
# from socket import *# import time# ip_port = ('127.0.0.1',8080)# back_log = 5# buffer_size = 1024# ...
- P1494 [国家集训队]小Z的袜子(luogu)
P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线( ...