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)个 ...
随机推荐
- 【转】C# ArcgisEngine开发中,对一个图层进行过滤,只显示符合条件的要素
有时候,我们要对图层上的地物进行有选择性的显示,以此来满足实际的功能要求. 按下面介绍的方法可轻松实现图层属性过滤显示: 1.当图层已经加载时 private void ShowByFilter(Ax ...
- 虚拟ONVIF 摄像机
測试视频监控系统须要大量的Camera.搭建起来也很麻烦,在vdceye中增加虚拟onvif 摄像 机支持,把一个Camera变成上百个. watermark/2/text/aHR0cDovL2Jsb ...
- 在SAE上使用Ueditor的图片上传功能
SAE上是没有文件夹读写权限的,所以要在SAE使用Ueditor的图片上传功能须要借助SAE的Storage服务. 一.开通Storage服务 在SAE控制台开通Storage服务,并新增一个doma ...
- insmod: error inserting 'hello.ko': -1 Invalid module format
在学习编写linux驱动程序的时候,一般都是从写一个helloworld的模块開始. 可是在编译完毕后,进行模块载入的时候,有时会出现例如以下错误: insmod: error inserting ' ...
- 分享几个可用的rtsp, http測试url
rtsp://218.204.223.237:554/live/1/0547424F573B085C/gsfp90ef4k0a6iap.sdp rtsp://218.204.223.237:554/l ...
- ShareREC for iOS v1.0.4 已经公布
ShareREC for iOS v1.0.4 已经公布 版本号:v1.0.4 2015-3-13 1.新增视频列表的筛选排序功能 2.修复在開始录制后,没有调用结束录制直接进入社区崩溃问题 3.优化 ...
- WebService CXF学习:复杂对象传递(List,Map)
转自:https://blog.csdn.net/z69183787/article/details/35988335 第一步:创建存储复杂对象的类(因为WebServices的复杂对象的传递,一定要 ...
- mac下安装postgreSql
在 mac 下,可以利用 homebrew 直接安装 PostgreSQL: 1 brew install postgresql -v 稍等片刻,PostgreSQL 就安装完成.接下来就是初始数据库 ...
- Java NIO(六)选择器
前言 Selector选择器是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样使得一个单独的线程可以管理多个Channel,从而管理多个网络连接.选择 ...
- GreenDao 3.X之基本使用
在GreenDao 3.X之注解已经了解到GreenDao 3.0的改动及注解.对于数据库的操作,无异于增删改查等四个操作.下面我们将了解GreenDao 3.X如何使用? AbstractDao 所 ...