HDU 4825

对于给定的查询(一个整数),求集合中和他异或值最大的值是多少

按位从高位往低位建树,查询时先将查询取反,然后从高位往低位在树上匹配,可以匹配不可以匹配都走同一条边(匹配表示有一个异或值为1的边,选择当然最好;不能匹配说明不存在一条异或值为1的边,那么只存在一条为0的边,也不得不选)

  1. //#pragma comment(linker, "/STACK:1677721600")
  2. #include <map>
  3. #include <set>
  4. #include <stack>
  5. #include <queue>
  6. #include <cmath>
  7. #include <ctime>
  8. #include <vector>
  9. #include <cstdio>
  10. #include <cctype>
  11. #include <cstring>
  12. #include <cstdlib>
  13. #include <iostream>
  14. #include <algorithm>
  15. using namespace std;
  16. #define INF 0x3f3f3f3f
  17. #define inf (-((LL)1<<40))
  18. #define lson k<<1, L, (L + R)>>1
  19. #define rson k<<1|1, ((L + R)>>1) + 1, R
  20. #define mem0(a) memset(a,0,sizeof(a))
  21. #define mem1(a) memset(a,-1,sizeof(a))
  22. #define mem(a, b) memset(a, b, sizeof(a))
  23. #define FIN freopen("in.txt", "r", stdin)
  24. #define FOUT freopen("out.txt", "w", stdout)
  25. #define rep(i, a, b) for(int i = a; i <= b; i ++)
  26. #define dec(i, a, b) for(int i = a; i >= b; i --)
  27.  
  28. template<class T> T MAX(T a, T b) { return a > b ? a : b; }
  29. template<class T> T MIN(T a, T b) { return a < b ? a : b; }
  30. template<class T> T GCD(T a, T b) { return b ? GCD(b, a%b) : a; }
  31. template<class T> T LCM(T a, T b) { return a / GCD(a,b) * b; }
  32.  
  33. //typedef __int64 LL;
  34. typedef long long LL;
  35. const int MAXN = + ;
  36. const int MAXM = ;
  37. const double eps = 1e-;
  38. LL MOD = ;
  39.  
  40. const LL H = ((LL) << ) - ;
  41. int t, n, m, num[], cas = ;
  42. int tree[][], s;
  43.  
  44. void get_num(LL x) {
  45. mem0(num);
  46. int id = ;
  47. while(x) {
  48. num[id++] = x % ;
  49. x >>= ;
  50. }
  51. }
  52.  
  53. void insert_to_tree(LL x)
  54. {
  55. get_num(x);
  56. int u = ;
  57. dec (i, , ) {
  58. int c = num[i];
  59. if(!tree[u][c]) {
  60. tree[u][c] = ++s;
  61. }
  62. u = tree[u][c];
  63. }
  64. }
  65.  
  66. int main()
  67. {
  68. // FIN;
  69. cin >> t;
  70. while(t--) {
  71. s = ;
  72. mem0(tree);
  73. scanf("%d %d", &n, &m);
  74. LL x, ans;
  75. rep (i, , n) {
  76. scanf("%lld", &x);
  77. insert_to_tree(x);
  78. }
  79. printf("Case #%d:\n", ++cas);
  80. rep (i, , m) {
  81. scanf("%lld", &x);
  82. x = (~x) & H;
  83. get_num(x);
  84. int u = ;
  85. ans = ;
  86. dec (j, , ) {
  87. int c = num[j];
  88. ans |= (LL)(tree[u][c] ? c : !c) << j;
  89. u = tree[u][c] ? tree[u][c] : tree[u][!c];
  90. }
  91. printf("%lld\n", ans);
  92. }
  93. }
  94. return ;
  95. }

HDU 4825 字典树的更多相关文章

  1. Chip Factory HDU - 5536 字典树(删除节点|增加节点)

    题意: t组样例,对于每一组样例第一行输入一个n,下面在输入n个数 你需要从这n个数里面找出来三个数(设为x,y,z),找出来(x+y)^z(同样也可以(y+z)^1)的最大值 ("^&qu ...

  2. HDU 5687 字典树插入查找删除

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...

  3. HDU 5384 字典树、AC自动机

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5384 用字典树.AC自动机两种做法都可以做 #include<stdio.h> #includ ...

  4. hdu 2112(字典树+最短路)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. hdu 2072(字典树模板,set,map均可做)

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=2072 lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词 ...

  6. hdu 1251 字典树的应用

    这道题看了大神的模板,直接用字典树提交的会爆内存,用stl 里的map有简单有快 #include <iostream> #include <map> #include < ...

  7. hdu 2896 字典树解法

    #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...

  8. Repository HDU - 2846 字典树

    题意:给出很多很多很多很多个 单词 类似搜索引擎一下 输入一个单词 判断有一个字符串包含这个单词 思路:字典树变体,把每个单词的后缀都扔字典树里面,这里要注意dd是一个单词 但是把d 和dd都放字典树 ...

  9. Phone List HDU - 1671 字典树

    题意:给出一堆一组一组的数字  判断有没有哪一个是另外一个的前缀 思路:字典树 插入的同时进行判断  不过 当处理一组数字的时候 需要考虑的有两点1.是否包含了其他的序列2.是否被其他序列包含 刚开始 ...

随机推荐

  1. 《大话设计模式》ruby版代码:外观模式

    需求: 股民买卖股票 初步代码: # -*- encoding: utf-8 -*- #股票1 class Stock1 def buy puts '股票1买入' end def sell puts ...

  2. hdu1199 线段树

    这题说的是给了 n 个操作. 每个操作会把 [a,b] 之间的球 涂为黑色或者 白色, 然后最后问 最长的连续的白色的 球有多少个,初始的时候全是黑的. 我们将所有的点离散化, 记得离散 a-1, b ...

  3. 【读书笔记】Junit实战

    Junit实战读书笔记 第一章节 探索Junit: Junit是1997年Erich Gammay和Kent Beck一同创建的一个简单有效的测试框架,其中Erich Gammay是经典<设计模 ...

  4. SQL学习笔记四(补充-2)之MySQL多表查询

    阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table depart ...

  5. mybatis的namespace

    Mybatis的namespace是用来绑定Dao接口的,使用了namespace之后就可以不用写接口实现类,dao接口的方法对应mapper.xml中的sql语句. 详情见:https://blog ...

  6. WinterCamp2017 游记

    Winter is coming! Day0 Day0前一天打了一轮CF,做完了ABCD,Div2 Rank59.然后就去开开心心的睡觉,准备第二天的行程. 快到一点的时候躺在了床上,睡不着,翻来覆去 ...

  7. G-Sensor 8452驱动及相关

    8452是一款G-Sensor芯片,采用I2C跟主芯片通讯,采用中断方式跟操作系统协作.通过内部检测XYZ三个方向的加速度,实现各种应用. (1)原理框图如下: 现在来实现在WINCE中的I2C驱动, ...

  8. A8几种内存

    1.SD卡(程序可写入,当成最次硬盘来用) 2.nandflash(程序可写入,当成一般硬盘来用) 3.DDR2(当A8板子的内存条来用)

  9. HDU 2457 DNA repair(AC自动机+DP)题解

    题意:给你几个模式串,问你主串最少改几个字符能够使主串不包含模式串 思路:从昨天中午开始研究,研究到现在终于看懂了.既然是多模匹配,我们是要用到AC自动机的.我们把主串放到AC自动机上跑,并保证不出现 ...

  10. 【重新挂载磁盘空间】Linux系统/home的磁盘空间重新挂载给/root

    以下是在centos7版本上做测试 使用如下命令查看磁盘使用情况 ls -lh 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9 ...