题意:

t组样例,对于每一组样例第一行输入一个n,下面在输入n个数

你需要从这n个数里面找出来三个数(设为x,y,z),找出来(x+y)^z(同样也可以(y+z)^1)的最大值 (“^”代表异或操作,即“相同为0,不同为1”)

题解:

这一道题和Xor Sum HDU - 4825很相似

因为异或运算的特性,我们最后要求最大值,那我们就对这n个数的二进制形式建一颗字典树。然后就暴力枚举是哪两个数相加,然后在字典树中把这两个数删掉。然后在处理完的字典树中查找那个能使结果尽可能大的第三个数(至于怎么查找具体看代码)

代码:

  1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <cstdlib>
5 #include <algorithm>
6 using namespace std;
7 typedef long long ll;
8 const int maxn=2;
9 typedef struct Trie* TrieNode;
10 ll v[1005];
11 struct Trie
12 {
13 ll val,sum;
14 TrieNode next[2];
15 Trie()
16 {
17 val=0;
18 sum=0;
19 memset(next,NULL,sizeof(next));
20 }
21 };
22
23 void inserts(TrieNode root,ll x,ll y)
24 {
25 TrieNode p = root;
26 for(ll i=31;i>=0;--i)
27 {
28 ll temp=(x>>i)&1;
29 if(p->next[temp]==NULL) p->next[temp]=new struct Trie();//printf("*%d*",temp);
30 p->next[temp]->sum+=y;
31 p=p->next[temp];
32 //printf("%d ",p->sum);
33 //p->sum+=y;
34 //printf("%lld %lld %lld\n",i,p->sum,temp);
35 }
36 p->val=x;
37 }
38
39 ll query(TrieNode root,ll x)
40 {
41 TrieNode p = root;
42 for(ll i=31;i>=0;--i)
43 {
44 ll temp=((x>>i)&1)^1;
45 if(p->next[temp]!=NULL && p->next[temp]->sum>0)
46 {
47 p=p->next[temp];
48 }
49 else
50 {
51 temp=(x>>i)&1;
52 if(p->next[temp]!=NULL && p->next[temp]->sum>0)
53 p=p->next[temp];
54 else //if(p->next[temp]==NULL && p->next[temp^1]==NULL)
55 {
56 //printf("****");
57 //printf("%d\n",p->val);
58 return x^p->val;
59 }
60 //else
61 }
62 }
63 return x^p->val;
64 }
65 void Del(TrieNode root)
66 {
67 for(ll i=0 ; i<2 ; ++i)
68 {
69 if(root->next[i])Del(root->next[i]);
70 }
71 delete(root);
72 }
73
74 int main()
75 {
76 ll t,n;
77 scanf("%lld",&t);
78 while(t--)
79 {
80 TrieNode root = new struct Trie();
81 scanf("%lld",&n);
82 for(ll i=1;i<=n;++i)
83 {
84 scanf("%lld",&v[i]);
85 inserts(root,v[i],1);
86 }
87 ll ans=0;
88 for(ll i=1;i<=n;++i)
89 {
90 inserts(root,v[i],-1);
91 for(ll j=i+1;j<=n;++j)
92 {
93 inserts(root,v[j],-1);
94 ans=max(ans,query(root,v[i]+v[j]));
95 inserts(root,v[j],1);
96 }
97 inserts(root,v[i],1);
98 }
99 printf("%lld\n",ans);
100 Del(root);
101 }
102 return 0;
103 }

Chip Factory HDU - 5536 字典树(删除节点|增加节点)的更多相关文章

  1. HDU 5536 Chip Factory 【01字典树删除】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5536 Chip Factory Time Limit: 18000/9000 MS (Java/Ot ...

  2. ACM学习历程—HDU 5536 Chip Factory(xor && 字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536 题目大意是给了一个序列,求(si+sj)^sk的最大值. 首先n有1000,暴力理论上是不行的. ...

  3. HDU 5536 Chip Factory (暴力+01字典树)

    <题目链接> 题目大意: 给定一个数字序列,让你从中找出三个不同的数,从而求出:$\max_{i,j,k} (s_i+s_j) \oplus s_k$的值. 解题分析:先建好01字典树,然 ...

  4. Chip Factory(01字典树)

    Chip Factory http://acm.hdu.edu.cn/showproblem.php?pid=5536 Time Limit: 18000/9000 MS (Java/Others)  ...

  5. HDU-5536 Chip Factory,又见字典树,好题+1!

    Chip Factory 题意:一个n个数的数列,求三个数其中两个数的和与另外一个数的异或值最大,输出这个最大值. 思路:和前面那个百度之星资格赛HDU4825的类似,多了两个过程,一个是枚举和,另一 ...

  6. HDU 5536 字典树

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

  7. HDU 5687 Problem C 【字典树删除】

    传..传送:http://acm.hdu.edu.cn/showproblem.php?pid=5687 Problem C Time Limit: 2000/1000 MS (Java/Others ...

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

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

  9. HDU 5687 字典树入门

    Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

随机推荐

  1. update 表名 set 某列名=now() where user in('user1','user2','user3');

    update 表名  set 某列名=now() where user in('user1','user2','user3');

  2. 【EXP】exp-00091解决办法

    如果遇到exp的话一般都是因为字符集的问题 解决办法: 1.在oracle中查看数据库的字符集 SQL> select userenv('language') from dual; USEREN ...

  3. 【EXPDP/IMPDP】ORACLE数据泵导入导出案例(expdp & impdp)

    概要: 因项目需要,通常需要将生产库下的部分数据抽取并恢复到测试库上 本文主要介绍数据泵导入导出的几种情况以及错误处理 案例环境: rhel-server-6.5-x86_64 oracle 11.2 ...

  4. 迈凯伦765LT/600LT/720S/650S/570S维修手册电路图Mclaren车间手册接线图

    全套迈凯伦维修手册电路图Mclaren车间手册线路图:语言:English,German,French,Spanish,Chinese,Japanese.McLaren迈凯伦新GT维修手册电路图零配件 ...

  5. Java集合List-差集、并集、交集

    Java集合List的差集.并集.交集 转载于:https://www.cnblogs.com/qlqwjy/p/9812919.html 一.List的差集 @Test public void te ...

  6. 阿里云RDS物理备份恢复到本地

    一:业务场景 验证阿里云备份文件可用性 二:恢复到本地过程中遇到的问题 1.修改密码报错 2.自定义函数不可用 三:恢复步骤 1.xtrabackup安装使用 请参考:https://www.cnbl ...

  7. Python Debug工具

    最近在github上冒出了一个python的debug神器PySnooper,号称在debug时可以消灭print.那么该工具有哪些优点呢,如何使用该工具呢.本文就介绍该工具的优缺点和使用方式. 前言 ...

  8. nfs samba文件共享服务

    (注意:实验之前强关闭selinux和防火墙) 一丶nfs ① 1.服务端 启动服务 systemctl start nfs.service   配置文件 vim /etc/exports share ...

  9. b站视频_下载_去水印_视频转mp4-批量下载神器

    b站下载_视频_去水印_转mp4_批量下载的解决办法 以下问题均可解决 b站下载的视频如何保存到本地 b站下载的视频在那个文件夹里 b站下载视频转mp4 b站下载app b站下载在哪 b站下载视频电脑 ...

  10. JavaScript常用API

    JavaScript常用API 节点属性 文档节点 事件监听.一出事件 获取元素方法