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]有值,那么就向下继续查找/ ...
随机推荐
- iFreeThinking - 记录生活,分享思考
http://www.ifreethinking.com iFreeThinking.com 是一个非营利性个人博客网站.开于 2014 年,博客主要记录分享一些思考和感悟. 文章列表:http:// ...
- hdu 2425 Hiking Trip
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2425 Hiking Trip Description Hiking in the mountains ...
- postgresql 连接数
改文件 postgresql.conf 里的 #max_connections=32 为 max_connections=1024 以及另外相应修改 share_buffer 参数. 执行SELECT ...
- libevent I/O示例
I/O示例使用一个windows平台上服务器/客户端的例子来演示.由于为了减少代码篇幅等各种由于本人懒而产生的原因,以下代码没有做错误处理以及有些小问题,但是我想应该不影响演示,大家多包涵. 服务器代 ...
- IOS中GPS定位偏移纠正(适用于Google地图)
在这个神奇的国度里,我们总得学习一些有中国特色的东东,例如“火星坐标”.也许有人还不知道这是什么玩意,我就简要介绍一下吧. 如果你有带GPS模块的智能手机,打开定位功能,然后访问Google ...
- NPOI导出word,以及对table的一些设置
参考网址:http://www.aiuxian.com/article/p-1970779.html NPOI版本:2.1.3.1 最终效果图: 代码: /// <summary> /// ...
- 霍夫变换(hough transform)
x-y轴坐标:y=kx+b k-b轴坐标:b=-xk+y θ-r轴坐标:
- Android实现SharePreferences和AutoCompletedTextView
Android实现SharePreferences和AutoCompletedTextView 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 ...
- 读:HIS 与医保系统的接入方案及实现
HIS 与医保系统的接入方案及实现刘剑锋 李刚荣第三军医大学西南医院信息科(重庆 400038) 医院HIS和医保系统的接口设计方案涉及两个部分,分别由医院和医保中心分别完成相,应的程序设计,这两部分 ...
- VDN For PB Web实现消息推送
利用VesnData.Net(VDN)的互联网数据驱动功能我们实现了PB连接互联网数据库的功能.在互联网开发的过程中我们往往有些消息或者数据希望即时能够通知到各个客户端,现在比较流行的一种技术就是消息 ...