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)个 ...
随机推荐
- webuploader 教程
1.引入js和css <!-- Web Uploader --> <link rel="stylesheet" type="text/css" ...
- MySQL DROP TABLE操作以及 DROP 大表时的注意事项
语法: 删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CA ...
- HDU 4354
思路是在看电视时突然想到的.枚举区间,然后按树形DP来选择最大值看是否满足条件.但枚举区间时的方法低效,看了题解,说枚举区间可以设两个指针逐步移动, 开始 l = r = 1, 记录已经出现的国家. ...
- [HTML 5] More about ARIA Relationships
- vehicle time series data analysis
以HADOOP为代表的云计算提供的仅仅是一个算法执行环境,为大数据的并行计算提供了在现有软硬件水平下最好的(近似)方法.并不能解决大数据应用中的全部问题.从详细应用而言,通过物联网方式接入IT圈的数据 ...
- .NET 图片解密为BASE64
#region 图片加密 /// <summary> /// 加密本地文件 /// </summary> /// <param name="inputname& ...
- 0x01 位运算
都比较基础吧. 知识点 1.快速幂和快速乘(这里有一个用long double舍弃精度的做法,但是感觉既不稳又没用) 2.懒人写边目录的时候的k^1 3.lowbit,得到的是低到高第一个1的位.求一 ...
- 1. Two Sum[E]两数之和
题目 Given an array of integers, return indices of the two numbers such that they add up to a specific ...
- java类List及List遍历器的代码
从某个程序中截取的一个示例代码: List<User> users = userDao.selectAll(); //mybatis java orm Iterator<User&g ...
- Spring学习笔记(一) 简介
版权声明 本文是摘自IBM上Naveen Balani的一篇文章,原文请点击此处:http://www.ibm.com/developerworks/cn/java/wa-spring1/ Sprin ...