Xor Sum

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)
Total Submission(s): 0    Accepted Submission(s): 0

Problem Description
Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问。每次询问中包括一个正整数 S ,之后 Zeus 须要在集合其中找出一个正整数 K ,使得 K 与 S 的异或结果最大。Prometheus 为了让 Zeus 看到人类的伟大。随即允许 Zeus 能够向人类求助。你能证明人类的智慧么?
Input
输入包括若干组測试数据,每组測试数据包括若干行。 输入的第一行是一个整数T(T < 10),表示共同拥有T组数据。

每组数据的第一行输入两个正整数N,M(<1=N,M<=100000),接下来一行,包括N个正整数。代表 Zeus 的获得的集合,之后M行。每行一个正整数S,代表 Prometheus 询问的正整数。全部正整数均不超过2^32。

Output
对于每组数据,首先须要输出单独一行”Case #?:”。当中问号处应填入当前的数据组数,组数从1開始计算。

对于每一个询问。输出一个正整数K。使得K与S异或值最大。

Sample Input
3 2 
3 4 5 
5
4 1
4 6 5 6 
3

Sample Output
Case #1: 
Case #2: 
4

题解:把集合中的每个数。都存放到深度为32的01字典树。左结点为0。右结点为1;然后询问数s取反与字典树中的存的数比   较找出最大异或数;
 对于随意非负整数x。能够沿着树根往下贪心找到y。使得a异或y最大,复杂度为树的深度。
以下为代码实现
#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;elsep->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;elsep->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字典树)相关推荐

  1. HDU4825 Xor Sum 01字典树(Tire Tree)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

  2. 2014百度之星资格赛——Disk Schedule

    2014百度之星资格赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中, ...

  3. 2014百度之星资格赛第一道Energy Conversion

    Problem Description 魔法师百小度也有遇到难题的时候--现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力.过了许久,百小 ...

  4. [2014百度之星资格赛]

    第一个问题: Energy Conversion Problem Description 魔法师百小度也有遇到难题的时候--如今.百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这样的魔 ...

  5. 2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)

    Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. 2014 百度之星 资格赛 第一题 Energy Conversion 解题思路

    本次比赛的资格赛似乎比以往来的要稍微难一点,但是整体来说,每道题想到解题思路都不是很难,但是在具体的代码编写过程中需要注意的细节尤为重要.下面先将第一题的题目贴出: [Time Limit: 2000 ...

  7. 2014百度之星资格赛 1001 Energy Conversion(递归)题意不解释

    Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. 2014百度之星资格赛第二题

    Disk Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  9. 2014百度之星资格赛解题报告:能量变换

    QAZ的能量变换 题目描述: 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于 ...

最新文章

  1. Eclipse to android
  2. 基于区块链的思考与创新应用实践
  3. RMAN backup recovery area 命令
  4. 几个预防并发搞垮下游服务的方法
  5. 写给新入职的毕业生们(二)
  6. Hadoop常见问题及解决方法
  7. python实现触摸精灵功能_FRIDA脚本系列(三)超神篇:百度AI“调教”抖音AI
  8. Linux之安装显卡驱动
  9. 用 WebGL 探索动画和交互技术(一个学习案例)
  10. python 客户端同构_同构python算法
  11. win7 按修改时间范围文件搜索
  12. numpy和pandas的操作
  13. Python使用天气网api接口获取天气数据
  14. picpick文字竖排了怎么变成横排
  15. oracle 信用检查,Oracle EBS 信用(Credit)额度(1)
  16. vst开启语音服务器,VST语音遥控器体验记
  17. BookReader
  18. mvn clean package是个什么鬼?
  19. 小米手机解bl锁正规方法!
  20. 建立第一个Power Apps程序(新手版)

热门文章

  1. pandas合并groupby_Pandas中级技巧-数据的灵活运算
  2. unity 打开项目路径无效_unity3d建立的文件有中文路径,现在新建了项目打不开了...
  3. python图片转动漫_python实现了照片转化为动漫模式
  4. 百度定位安卓6.0权限问题
  5. 画时序图软件 TimeGen 3.2 TimingDesigner 9.103 AndyTiming
  6. VB 二进制数据读写实例
  7. VB得到指定文件夹下的文件列表
  8. 又把锅甩给中国!苹果和解给了300多亿,但高通业绩预测并不乐观
  9. 特斯拉好事连连:自动驾驶新硬件性能提升10倍,两名新董事昨晚上任,股价涨5.6%...
  10. DeepMind去年亏损27亿元,同比扩大221%,谷歌说:继续烧