先上代码:

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. multiple web application host under the same website on IIS (authentication mode)

    第一种方式,修改forms的name how to set the forms authentication cookie path assume you have already solved th ...

  2. 2017 Multi-University Training Contest - Team 2 &&hdu 6053 TrickGCD

    TrickGCD Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  3. css定位、position与float同时使用的情况

    一.css定位 CSS 有三种基本的定位机制:普通流.浮动和绝对定位. 1.普通流:未专门指定的元素都在普通流中定位,position:static/relative;和float:none;也在普通 ...

  4. go之结构体

    一.关于结构体 简述 1.go 语言的切片可以存储同一类型的数据,但是结构体可以为不同项定义不同的数据类型 2.结构体是有一系列具有相同类型或不同类型的数据构成的数据集合 3.因为go 没有类似于类的 ...

  5. 10.Flask-上下文

    1.1.local线程隔离对象 不用local对象的情况 from threading import Thread request = ' class MyThread(Thread): def ru ...

  6. A - Team

    Problem description One day three best friends Petya, Vasya and Tonya decided to form a team and tak ...

  7. C#之纯数字判断

    public bool isNaN(string temp) { ; i <temp.Length; i++) { byte tempByte = Convert.ToByte(temp[i]) ...

  8. js基础---数组方法

    数组数据的排序及去重 sort无形参的排序方式 arr1=[2,12,3,15]; var a=arr1.sort();console.log(arr1);console.log(a);//排序会改变 ...

  9. 简繁体互换工具:opencc

    简繁体互换工具:opencc opencc是一个简体.繁体相互转换的命令行工具. 安装 下载软件包.在下载页面下载软件包(如1.0.4版本) 解压.通过命令解压:tar -xzvf opencc-1. ...

  10. 相机标定:PNP基于单应面解决多点透视问题

              利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...