题目在HDU_OJ

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

思路:

字典树:

把每个数字用32位二进制来表示,然后把32位二进制按高位到地位的顺序构建0-1字典树。例如1就是 0(31)1

贪心:

用贪心算法从0-1字典树中找到异或最大的值:异或运算有一个性质,就是对应位不一样就为1。我们需要做的,就是尽可能让结果的高位为1,也就是需要在0-1字典树中,尽可能找到当前进行比较的位的相反数,例如当前比较的位为1,则就需要尽可能在0-1字典树中找到0,因为这样异或运算结果是1,如果没有0,才找1.

AC代码

#include<iostream>
using namespace std;
typedef long long ll;struct Tree {Tree *child[2];Tree() { child[0] = NULL; child[1] = NULL;}
};Tree *root;//0-1字典树的根void insert(ll x) {int i, bit;Tree * cur;cur = root;//当前节点for (i = 31; i >=0; i--) {bit = (x >> i) & 1;//当前进行比较的位if (!cur->child[bit]) { //如果该点在0-1字典树中不存在cur->child[bit] = new Tree; //创建点}cur = cur->child[bit];}
}ll search(ll x) {int bit, i;ll ans = 0;Tree *cur = root;for (i = 31; i >= 0; i--) {bit = !((x >> i) & 1);//取当前位的相反位ans <<= 1;if (cur->child[bit]) {//如果相反位存在cur = cur->child[bit];ans = (ans | bit); //在低位插入这个相反位}else {cur = cur->child[!bit];ans = (ans | !bit);}}return ans;
}int main() {int M, N, K, T, count = 1;ll S, num;scanf("%d", &T);while (count<=T) {scanf("%d %d", &N, &M);root = new Tree;for (int i = 0; i < N; i++) {scanf("%lld", &num);insert(num);}printf("Case #%d:\n", count);while (M--) {scanf("%lld", &S);printf("%lld\n", search(S));}count++;}return 0;
}

2014百度之星 Xor Sum(字典树+贪心)相关推荐

  1. HDU多校1 - 6955 Xor sum(字典树+贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,要求找到一段长度最短的区间,使得异或和大于等于 kkk,如果有多种答案,输出左端点最小的那个 题目分析:倒着维护一下后缀异或和,将后缀异或 ...

  2. HDU - 4825 Xor Sum(字典树)

    题目链接:点击查看 题目大意:给出n个数组成的数组,再给出m个询问,每次询问给出一个x,要求从数组中选出一个k,使得k^x的值最大 题目分析:字典树求异或值最大的模板题,对于n个数直接insert到字 ...

  3. HDU - 6955 Xor sum tire树 + 贪心

    传送门 文章目录 题意: 思路: 题意: 给你一个数列aaa,你需要找出来一个长度最小且左端点最靠前的区间,使其异或和≥k\ge k≥k. n≤1e5,0≤ai,k<230n\le1e5,0\l ...

  4. 2014百度之星资格赛第一道Energy Conversion

    Problem Description 魔法师百小度也有遇到难题的时候--现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力.过了许久,百小 ...

  5. 2014百度之星资格赛——Disk Schedule

    2014百度之星资格赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中, ...

  6. hdu4825 字典树 + 贪心

    题意:       给你n个数,然后给你m组询问,每组询问给你一个数,输出n个数中与该数亦或 的最大的那个数,输出的是被亦或的那个数,不是亦或后的结果. 思路:       我用的是字典树+贪心,首先 ...

  7. 2014百度之星资格赛—— Xor Sum(01字典树)

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

  8. CodeForces - 979D Kuro and GCD and XOR and SUM(字典树+暴力+模拟)

    题目链接:点击查看 题目大意:说实话看到这么复杂而且还是英文的题面我是拒绝的,但题还是得补啊,就去百度找的题解看题意,题意大概是这样的: 给出n个操作,每个操作分为两种类型: 1 x:向集合中插入x ...

  9. HDU4825 Xor Sum —— Trie树

    题目链接:https://vjudge.net/problem/HDU-4825 Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

最新文章

  1. Skype的收购为微软带来了什么
  2. mac下appium启动
  3. eeglab中文教程系列(2)-绘制脑电头皮图
  4. c语言使用指针改数组逆置,用指针作函数参数,编写函数,将一个整型数组中的元素全部逆置。...
  5. 电子商务公司的职能架构及基础岗位职能
  6. javafx 值对_我今天对JavaFX的了解
  7. java如何画百分比圆环_canvas绘制旋转的圆环百分比进度条
  8. 联邦快递“误运”华为包裹遭调查 联邦快递:全力配合
  9. 项目的ip地址更改,用git从远程提取代码出现错误,提示为 network error connection timed out...
  10. arm 跑马灯 linux,ARM开发板(S3C2440)上LED灯驱动及跑马灯的实现
  11. WordPress 安装插件导致 HTTP 500 内部服务器错误的问题
  12. 中心极限与大数定理律的关系_中心极限定理的最最通俗解释
  13. Java的深拷贝 vs 浅拷贝
  14. 联想小新潮5000 完美黑苹果 EFI文件
  15. VoIP服务器处理协议,多协议VoIP服务器的研究与实现
  16. lg g7 刷机 救砖 root
  17. ANSYS——模态分析的理论基础
  18. 转:echarts图表x,y轴的设置
  19. Cisco网站模块 14 - 15:网络应用通信考试试题及答案
  20. 蓝牙写入数据库_android 蓝牙 数据库

热门文章

  1. 华南理工大学院长涉嫌篡改8名研究生成绩,4人已停职
  2. 300万奖金池,第二届“中国版ImageNet”开赛
  3. 一文概览主要语义分割网络:FCN,SegNet,U-Net...
  4. 月入5W,月花销不足2K的程序员,可免费获得AI女友一名
  5. Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?
  6. Sentinel实现限流,竟是如此的简单!
  7. 用 float 存储金额,老板说损失从工资里扣!
  8. Spring Cloud Alibba教程:如何使用Nacos作为配置中心
  9. 如何合理地估算线程池大小?
  10. 深入浅出神经网络的改进方法!