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)个 ...
随机推荐
- Android 四大组件学习之BroadcastReceiver四
本节学习系统中特殊的广播接收者. 我们前面几节不是说了,当广播接受者一旦注冊到系统中,当系统发送的广播和你注冊的广播的action匹配时,系统就会启动广播接收者所在的进程.除非用户手动停止广播接收者所 ...
- UVA - 11722 Joining with Friend 几何概率
Joining with Friend You are going from Dhaka to Chittagong by train and you ...
- php5.5安装笔记
这次没想到本来很简单的php编译,没想到遇到那么多问题.再此记录一下. 1.php5.5编译安装主要有一个难点,就是GD库的问题,因为php5.5的GD库必须是2.1以上的版本哦 原来都是用的gd2. ...
- OzymanDNS 使用——perl 5.22没有成功。。。
最初官方的代码没有找到,但是发现github里貌似有: git clone https://github.com/splitbrain/dnstunnel.git 源码是perl写的,需要安装一些pe ...
- 使用CNN做文本分类——将图像2维卷积换成1维
使用CNN做文本分类 from __future__ import division, print_function, absolute_import import tensorflow as tf ...
- 【POJ 1704】 Georgia and Bob
[题目链接] http://poj.org/problem?id=1704 [算法] 阶梯博弈 [代码] #include <algorithm> #include <bitset& ...
- NEU2016年一月月赛回顾
月赛传送门 http://acm.neu.edu.cn/hustoj/contest.php?cid=1066 月赛已经结束十天了...才把题目补完真是大失误... 茅巨巨四天前就补完了,,,总结写得 ...
- 【转】Docker基础
一.简介 Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup.Namespace.Union FS等技术实现的一种系统级虚拟化技术. 特性 更高效的利用系统资源: ...
- 【转】在IIS上部署你的ASP.NET Core项目
概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kest ...
- 几个月来使用mobx代替redux的一些总结
遇到的一些小坑 React组件内部想要调用store里的action方法,得如下图,否则不会调用(这个现在看来好像不对,待重新检验) 而不能如下图 组件中调用改变store的action后,状态变化并 ...