HDU 4825 Xor Sum(二进制的字典树,数组模拟)
//居然可以用字典树。。。
//用cin,cout等输入输出会超时
//这是从别处复制来的
#include<cstdio>
#include<algorithm>
#include<cstring> using namespace std; int node[][];
int tag,m,n,cas=,T;
long long one[],allone,tmp;
//0/1树的加数据操作,增加一个32的数
//其中如果当前位是0,则加左儿子,否则加右儿子,即这棵树中左儿子表示0,右儿子表示1
void add(long long temp) // l 0 r 1
{
int rt=,t;//rt为当前节点
for(int i=;i>=; i--)
{
t=temp&one[i]?:;//取得当前位是0还是1
if(node[rt][t]==-)//如果没有对应的儿子,就增加给它分配一个数组的下标
node[rt][t]=++tag;
rt=node[rt][t];//迭代执行
}
} long long lookfor(long long temp)//查找答案
{
int rt=,t;
long long ans=;
for(int i=; i>=; i--)
{
t=temp&one[i]?:;// temp&one[i] 1
if(node[rt][t]==-) t=t^;//如果没有与当前符合的儿子,则选择相反的儿子,显然这个儿子一定存在
rt=node[rt][t];//迭代当前节点
ans=ans*+t;//计算出查找的值
}
return ans;
} int main()
{
//freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
one[]=;
for(int i=; i<; i++)//得到2的幂次的数组
one[i]=one[i-]<<; allone=one[]-;//0xffffffff 用来异或
//printf("one %I64d\n",allone);
scanf("%d",&T);
while(T--)
{
tag=;//注意这个初始化,
memset(node,-,sizeof(node));
scanf("%d%d",&m,&n);
for(int i=; i<m; i++)
{
scanf("%I64d",&tmp);
add(tmp);
}
printf("Case #%d:\n",++cas);
for(int i=; i<n; i++)
{
scanf("%I64d",&tmp);//tmp为要查找的值
tmp=tmp^allone;//tmp变成和原来的它异或值最大的数,而我们就是要查找,最接近它的一个数m,接近是,数值和二进制的形式接近
printf("%I64d\n",lookfor(tmp));
}
}
return ;
}
//这是我看懂之后,跟着写了一遍(嘻嘻,因为是找这写的,所以差不多。。)
HDU 4825 Xor Sum(二进制的字典树,数组模拟)的更多相关文章
- HDU 4825 Xor Sum (裸字典树+二进制异或)
题目链接 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将 ...
- hdu 4825 Xor Sum(01字典树模版题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题解:一到01字典树的模版题,01字典树就是就是将一些树用二进制放到一个树上这样可以方便对整体异 ...
- HDU 4825 Xor Sum(01字典树入门题)
http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的 ...
- HDU 4825 Xor Sum(01字典树)题解
思路:先把所有数字存进字典树,然后从最高位贪心. 代码: #include<set> #include<map> #include<stack> #include& ...
- hdu 4825 Xor Sum(trie+贪心)
hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...
- HDU 4825 Xor Sum(经典01字典树+贪心)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- HDU 4825 Xor Sum 字典树+位运算
点击打开链接 Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) ...
- hdu 4825 xor sum(字典树+位运算)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- HDU 4825 Xor Sum(字典树)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 这道题更明确的说是一道01字典树,如果ch[u][id^1]有值,那么就向下继续查找/ ...
随机推荐
- lib和dll的区别,生成(转)
首先介绍下静态库(静态链接库,.lib文件),动态库*(动态链接库,.dll文件)的概念,首先两者都是代码共享的方式. 静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件,这 ...
- [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)
这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...
- ref和out的区别
ref类型参数是按地址传递,能改变原来的数值.使用ref传参前,变量必须赋值. 带有ref类型参数的函数,不会清空变量,所以离开该函数的时候,所有ref引用的变量可以赋值也可以不赋值. out类型参数 ...
- 关于自定义的NavigationBar
系统的NavigationBar局限太大,而且现在我要做的navigationBar需要四个按钮,一个Label,一个ImageView,所以不能用系统默认的. 刚刚咨询了一个高手,她的建议是,将系统 ...
- [转]Ubuntu 12.04开机自动挂载Windows分区
[转]Ubuntu 12.04开机自动挂载Windows分区 http://www.cnblogs.com/A-Song/archive/2013/02/27/2935255.html 系统版本:Ub ...
- 浅谈dynamic的简单使用用法
今天看了博客园里面的dynamic用法,我犹豫从来没接触过,今天恶补了一下,把我对dynamic的认识分享了出来,大家一起学习. Visual C# 2010 引入了一个新类型 dynamic. 该类 ...
- 关于使用,NI采集卡+labview信号采集,问题交流【第二贴】
*** 采集卡 NI PCI-6534: max sample rate 20MHz:32位的数字输入,数字输出. ***输入信号: 峰峰值,4.16V 最小值 -80mV 频率 ...
- 数据类型 swift
1整形 Int,Int8,Int16,Int32,Int64 UInt,UInt8,UInt16,UInt32,UInt64 其中Int,UInt始终和当前平台的原生字长相同(32位机,64位机) 查 ...
- Windows下安装Cygwin
1.去官网下载Cygwin http://www.cygwin.com/ 注意32位和64位的选择,完了直接点击exe文件开始安装. 2.安装 (1)“下一步”: (2)“Install form I ...
- DebugViewHierarchy
DebugViewHierarchy(视图调试)是XCode6新出的一项功能,它可以让开发者在程序运行时,动态的查看当前界面的显示情况,包括视图的层次,控件的大小和位置,而且会以3D效果显示当前视图的 ...