先上代码:

Xor Sum

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

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
2
3 2
3 4 5
1
5
4 1 
4 6 5 6
3
 
Sample Output
Case #1:
4
3
Case #2:
4
 
  中文题意不解释:思路,给定的集合里面的串是不会变的,所以可以开一棵Trie树来保存集合里面的所有数,每个数在Trie树里面转化成一个32位的串,然后将查询的串根Trie数里面的串匹配,匹配原则是这样的:如果同一个位置有存在相异的位,那么就转向相异的位的方向(因为异或是同零异一),如果不存在相异的位,那就只好走相同的位的方向了。这里可以分析得出一定存在路径是从头走到结尾的,因为这里每一个数都被扩展成32位,所以一定可以匹配到。
  提交有点坑→_→,当时交上去都是WA和RE,赛后Rejudge有几次的提交过了,据说是卡输出,如果得到的结果用一个中间变量来保存的话会WA,如果直接输出结果的话才AC。目测赛后又改了,所以过了。
 
上代码:
 
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <bitset>
#define NOT(x) (x == 1 ? 0 : 1)
#define MAX 3200002
#define LL long long
using namespace std; typedef bitset<> bs;
int s[MAX][],tot; void reset(){
memset(s[],,sizeof(s[]));
tot=;
} void insert(bs a){
int j=;
for(int i=;i>=;i--){
int u = a[i];
if(!s[j][u]){
memset(s[tot],,sizeof(s[tot]));
s[j][u] = tot++;
}
j = s[j][u];
}
} LL check(bs a){
LL r=;
int j=;
for(int i=;i>=;i--){
int u = a[i];
r<<=;
if(s[j][NOT(u)]){
r += NOT(u);
j = s[j][NOT(u)];
}else if(s[j][u]){
r +=u;
j = s[j][u];
} }
return r;
} int main()
{
LL t,n,m,a;
LL r;
//freopen("data.txt","r",stdin);
scanf("%I64d",&t);
for(int z=;z<=t;z++){
printf("Case #%d:\n",z);
scanf("%I64d %I64d",&n,&m);
reset();
for(int i=;i<n;i++){
scanf("%I64d",&a);
bs e(a);
insert(e);
}
for(int i=;i<m;i++){
scanf("%I64d",&a);
bs e(a);
r=check(e);
printf("%I64d\n",r);
}
}
return ;
}

1003

百度之星2014资格赛 1003 - Xor Sum的更多相关文章

  1. 2014百度之星第三题Xor Sum(字典树+异或运算)

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

  2. [百度之星2014资格赛] Disk Schedule 报告

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

  3. 百度之星2014资格赛 1004 - Labyrinth

    先上题目: Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  4. 【百度之星2014~初赛(第二轮)解题报告】Chess

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载.可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

  5. 【百度之星2014~初赛(第二轮)解题报告】JZP Set

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

  6. 【百度之星2014~复赛 解题报告~正解】The Query on the Tree

    声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站 ...

  7. 【百度之星2014~复赛)解题报告】The Query on the Tree

    声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站 ...

  8. 百度之星2014复赛 - 1001 - Find Numbers

    先上题目: Find Numbers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  9. 百度之星2014复赛 - 1002 - The Query on the Tree

    先上题目: The Query on the Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

随机推荐

  1. ASP.NET MVC 客户端验证失败后表单仍然提交问题

    客户端验证失败后表单仍然提交问题!导致页面刷新,辛辛苦苦输入的内容荡然无存. 多么奇怪的问题.按道理,验证失败,就应该显示各种错误信息,不会提交表单才对.而现在,错误信息正常显示,但页面却刷新了一遍. ...

  2. Codeforces Round #332 (Div. 2)C. Day at the Beach 树状数组

    C. Day at the Beach   One day Squidward, Spongebob and Patrick decided to go to the beach. Unfortuna ...

  3. 【Geforce】关于如何在Geforce Experience中登录

    相信不少人无法登录这个该死的Geforce Experience.这里提供几个解决方案: 1.在“服务”中启动运行 NVIDIA NetworkService Container 方式改为手动或者自动 ...

  4. 【字符串处理】AC自动机知识点&代码

    代码: #include<iostream> #include<vector> #include<cstdio> #include<queue> #in ...

  5. spring:使用<prop>标签为Java持久属性集注入值

    spring:使用<prop>标签为Java持久属性集注入值 使用 spring 提供的<prop>为Java持久属性集注入值,也就是向 java.util.Propertie ...

  6. 杂项-TMod:常见错误

    ylbtech-杂项-TMod:常见错误 1.返回顶部 1. 1.1. {Template Error} TypeError: dateDiff is not a function at Array. ...

  7. Ionic学习记录(一):ionic及cordova安装、创建第一个应用、项目结构

    目录: 一.ionic的安装 二.创建第一个应用程序 三.浏览器中预览应用 四.项目结构 五.添加页面 一.ionic的安装 使用Ionic创建和开发应用程序主要通过Ionic命令行实用程序(“CLI ...

  8. php解析 html类库 simple_html_dom

    如果从字符串加载html文档,需要先从网络上下载.建议使用cURL来抓取html文档并加载DOM中. 查找html元素 可以使用find函数来查找html文档中的元素.返回的结果是一个包含了对象的数组 ...

  9. C#之密封类(详解)

    10.3  密封类与密封方法 如果所有的类都可以被继承,那么很容易导致继承的滥用,进而使类的层次结构体系变得十分复杂,这样使得开发人员对类的理解和使用变得十分困难,为了避免滥用继承,C#中提出了密封类 ...

  10. MainActivity 多个Fragment 内存被回收

    0. 前言 应用首页采用Activity +Tab 模式,多个Fragment 替换显示隐藏 FragmentTransaction transaction = getSupportFragmentM ...