题意:给你n个数,让你在n个数中选三个,使得(a1+a2)^a3的值最大,a1!=a2!=a3(下标不等于);

解题思路:01字典树可以写,因为数据小,我们可以先把n个数建一颗字典树,然后两边for找a1+a2,扔到字典树中,但是这道题因为不能相同,所以有一个操作,每当我们扔一个a1+a2的时候,我们需要把a1和a2在树中删除,因为万一和a1能够成最大异或值,那么不合题意,在每次结束后,再把a1,a2加回来;

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define maxn 2005
  5. #define ll long long
  6. using namespace std;
  7. ll val[maxn*32];
  8. int num[maxn*32];
  9. int trie[maxn*32][2];
  10. int tot;
  11. int n;
  12. int t;
  13. int root;
  14. ll a[maxn];
  15. void init()
  16. {
  17. memset(num,0,sizeof(num));
  18. memset(val,0,sizeof(val));
  19. memset(trie,0,sizeof(trie));
  20. tot=0;root=0;
  21. }
  22. void get_trie(ll u)
  23. {
  24. root=0;
  25. for(int i=32;i>=0;i--)
  26. {
  27. int id=(u>>i)&1;
  28. if(!trie[root][id])
  29. trie[root][id]=++tot;
  30. root=trie[root][id];
  31. num[root]++;
  32. }
  33. val[root]=u;
  34. }
  35. void update(ll u,int cnt)
  36. {
  37. root=0;
  38. for(int i=32;i>=0;i--)
  39. {
  40. int id=(u>>i)&1;
  41. root=trie[root][id];
  42. num[root]+=cnt;
  43. }
  44. }
  45. ll query(ll u)
  46. {
  47. root=0;
  48. for(int i=32;i>=0;i--)
  49. {
  50. int id=(u>>i)&1;
  51. if(id==1)
  52. {
  53. if(trie[root][0]&&num[trie[root][0]])
  54. root=trie[root][0];
  55. else
  56. root=trie[root][1];
  57. }
  58. else
  59. {
  60. if(trie[root][1]&&num[trie[root][1]])
  61. root=trie[root][1];
  62. else
  63. root=trie[root][0];
  64. }
  65. }
  66. return val[root];
  67. }
  68. int main()
  69. {
  70. scanf("%d",&t);
  71. while(t--)
  72. {
  73. init();
  74. ll ans=-1;
  75. scanf("%d",&n);
  76. for(int i=1;i<=n;i++)
  77. {
  78. scanf("%lld",&a[i]);
  79. get_trie(a[i]);
  80. }
  81. for(int i=1;i<=n;i++)
  82. {
  83. for(int j=i+1;j<=n;j++)
  84. {
  85. update(a[i],-1);update(a[j],-1);
  86. ans=max(ans,(a[i]+a[j])^query(a[i]+a[j]));
  87. update(a[i],1);update(a[j],1);
  88. }
  89. }
  90. printf("%lld\n",ans);
  91. }
  92. }

  

hdu-5536(字典树)的更多相关文章

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

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

  2. HDU 5536 字典树

    题意:就是公式. 这现场赛O(n^3)能过,觉得太没天理了. 做法:字典树,枚举两个数,然后在字典树上贪心的跑. #include <bits/stdc++.h> using namesp ...

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

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

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

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

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

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

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

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

  7. hdu 1251 字典树的应用

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

  8. hdu 2896 字典树解法

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

  9. Repository HDU - 2846 字典树

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

  10. Phone List HDU - 1671 字典树

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

随机推荐

  1. 环境部署(四):Linux下查看JDK安装路径

    在安装好Git.JDK和jenkins之后,就需要在jenkins中进行对应的设置,比如在全局工具配置模块,需要写入JDK的安装路径. 这篇博客,介绍几种常见的在Linux中查看JDK路径的方法... ...

  2. Eclipse 设置保存代码时自动格式化

    在码代码或者优化的时候,经常需要使用到ctrl+shift+F来格式化代码,但其实ecilpse已经自带自动格式化功能了,只是没有默认开启. 正确的打开方式:windows-->Preferen ...

  3. Spark运行模式:cluster与client

    When run SparkSubmit --class [mainClass], SparkSubmit will call a childMainClass which is 1. client ...

  4. DAG也许是真正的区块链3.0

    从15年开始,区块链概念被单拎出来,这之前区块链还只是比特币技术里的一个数据结构,中本村白皮书里把block和chain连一起的时候也只是a chain of blocks .随着以太坊去中心化计算机 ...

  5. 快看Sample代码,速学Swift语言(3)-运算符

    运算符是用来检查,更改或组合值的特殊符号或短语.Swift提供的很多常规的运算符,如+.-.*./.%.=.==等,以及逻辑运算的&&.||等等,基本上不需要重复介绍,我们在这里只需要 ...

  6. linux上搭建svn服务器

    1.检查当前版本,没有的话用yum安装rpm -qa subversion 2.安装yum install subversion -y 2.建库mkdir -p /home/svn/projectsv ...

  7. mybatis 的sql语句及使用mybatis的动态sql mybatis防注入

    由于看到写的比较详细的文档这里将之前的删掉了,只留下一些我认为能帮助理解的和关于动态sql及防注入的一些理解.文档链接  :mybatis官方文档介绍 <!-- 根据条件查询用户 --> ...

  8. POJ - 3264 线段树模板题 询问区间最大最小值

    这是线段树的一个模板题,给出一串数字,然后询问区间的最大最小值. 这个其实很好办,只需把线段树的节点给出两个权值,一个是区间的最小值,一个是区间的最大值,初始化为负无穷和正无穷,然后通过不断地输入节点 ...

  9. PHP实用代码片段(三)

    1. 目录清单 使用下面的 PHP 代码片段可以在一个目录中列出所有文件和文件夹. function list_files($dir) { if(is_dir($dir)) { if($handle ...

  10. 一种简单有效的VBA源代码加密办法,支持64位宿主,适用于大部分VBA代码加密

    原始出处:http://www.cnblogs.com/Charltsing/p/EncryptVBACode.html VBA代码加密是个老生常谈的问题,自从本人的VBA Dumper发布之后,在O ...