HDU 4825 Xor Sum 字典树+位运算
Xor Sum
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)
Total Submission(s): 291 Accepted Submission(s): 151
输入的第一行是一个整数T(T < 10),表示共同拥有T组数据。
每组数据的第一行输入两个正整数N,M(<1=N,M<=100000),接下来一行,包括N个正整数,代表 Zeus 的获得的集合,之后M行,每行一个正整数S,代表 Prometheus 询问的正整数。全部正整数均不超过2^32。
对于每一个询问,输出一个正整数K,使得K与S异或值最大。
2
3 2
3 4 5
1
5
4 1
4 6 5 6
3
Case #1:
4
3
Case #2:
4
//437MS 24520K
#include<stdio.h>
#include<string.h>
#define ll long long
int root,q;
ll s[35]={1};
struct Node
{
int l,r;
ll val;
void clear(){l=r=-1;}//初始化
}node[32*100000];
void insert(int& root,int h,ll x)
{
if(root==-1)
{
root=q++;
node[root].clear();
}
if(h==-1)
{
node[root].val=x;
return;
}
if(x&s[h])insert(node[root].r,h-1,x);//这一为是1,则沿着右子树走
else insert(node[root].l,h-1,x);//否则沿着左子树走
}
void query(int root,int h,ll x)
{
if(h==-1)
{
printf("%lld\n",node[root].val);
return;
}
if(((x&s[h])&&node[root].l!=-1)||(node[root].r==-1))//由于异或是0^1=0,0^0=1所以要使结果最大,则0应找1,1应找0
query(node[root].l,h-1,x);
else
query(node[root].r,h-1,x);
}
int main()
{
int t,cas=1;
for(int i=1;i<=32;i++)
s[i]=s[i-1]<<1;
scanf("%d",&t);
while(t--)
{
int n,m;
q=0;
root=-1;
ll a,b;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a);
insert(root,32,a);
}
printf("Case #%d:\n",cas++);
for(int i=1;i<=m;i++)
{
scanf("%lld",&b);
query(root,32,b);
}
}
return 0;
}
HDU 4825 Xor Sum 字典树+位运算的更多相关文章
- 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 trie树
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Proble ...
- hdu 4825 Xor Sum(trie+贪心)
hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...
- AcWing:143. 最大异或对(01字典树 + 位运算 + 异或性质)
在给定的N个整数A1,A2……ANA1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数N. 第二行输入N个整数A1A1-ANAN. 输出格式 输出一 ...
- 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(01字典树入门题)
http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的 ...
- hdu 4825 Xor Sum(01字典树模版题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题解:一到01字典树的模版题,01字典树就是就是将一些树用二进制放到一个树上这样可以方便对整体异 ...
- HDU 4825 Xor Sum(字典树)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 这道题更明确的说是一道01字典树,如果ch[u][id^1]有值,那么就向下继续查找/ ...
- HDU 4825 Xor Sum(二进制的字典树,数组模拟)
题目 //居然可以用字典树...//用cin,cout等输入输出会超时 //这是从别处复制来的 #include<cstdio> #include<algorithm> #in ...
随机推荐
- 最近用的到的一些js的常用方法(简单的)
由于新的项目开始了,是使用MVC 5.0 开发的,前端使用了两个主流的框架 UIKIT,Ignite UI(收费) 因为是mvc主要用json来交互,不能避免要对前端脚本进行操作,所以就将能用到的方法 ...
- 如何分割(split)string字符串
使用String#split()方法 如下所示: String string = "004-034556"; String[] parts = string.split(" ...
- 浅谈JSP(一)
一.JSP引言 JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计.它是在传统的网页HTML文件(*.htm,*.html)中插入Java ...
- Android应用开发基础篇(10)-----Menu(菜单)
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/28/2372101.html 一.概述 Menu,简单来理解就是当你按下手机的“menu”键时所 ...
- URL地址的编码和解码问题
编码:encodeURIComponent() 方法:把URI字符串采用 UTF-8编码格式转化成escape格式的字符串.与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字 ...
- Hadoop 相关问题
1.MR Job 输入非常多,启动map 非常多,如何提高MapTask 启动速度(附加条件:集群很空闲,资源多多): 参考答案: a.重写调度器算法,降低时间复杂度 b.Out-of-bound h ...
- 闲来无事写写-Huffman树的生成过程
前言:最近项目上一直没事干,感觉无聊到了极点,给自己找点事做,补一下大学没有完成的事情,写一个huffman算法Java版的,学校里面写过c语言的. 因为很久没搞数据结构和算法这方面了(现在搞Java ...
- Primavera 6.0
Primavera 6.0(原p3e/c)荟萃了P3软件20年的项目管理精髓和经验,采用最新的IT技术,在大型关系数据库Oracle和MS SQL Server上构架起企业级的.包涵现代项目管理知识体 ...
- 帝国cms7.0 内容页控制简介字数!
帝国cms7.0 内容页有简介部分,使用以下代码可以有效控制字数限制! 下载类简介:<?=esub($navinfor[softsay],160)?> 文章类简介:<?=esub($ ...
- 激活Windows 10 正式版
原文 http://jingyan.baidu.com/article/27fa732684b5f646f8271ff4.html Windows 10只提供为期一年的免费升级.因此,不要无限拖延期自 ...