Chip Factory HDU - 5536 字典树(删除节点|增加节点)
题意:
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 字典树(删除节点|增加节点)的更多相关文章
- HDU 5536 Chip Factory 【01字典树删除】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5536 Chip Factory Time Limit: 18000/9000 MS (Java/Ot ...
- ACM学习历程—HDU 5536 Chip Factory(xor && 字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536 题目大意是给了一个序列,求(si+sj)^sk的最大值. 首先n有1000,暴力理论上是不行的. ...
- HDU 5536 Chip Factory (暴力+01字典树)
<题目链接> 题目大意: 给定一个数字序列,让你从中找出三个不同的数,从而求出:$\max_{i,j,k} (s_i+s_j) \oplus s_k$的值. 解题分析:先建好01字典树,然 ...
- Chip Factory(01字典树)
Chip Factory http://acm.hdu.edu.cn/showproblem.php?pid=5536 Time Limit: 18000/9000 MS (Java/Others) ...
- HDU-5536 Chip Factory,又见字典树,好题+1!
Chip Factory 题意:一个n个数的数列,求三个数其中两个数的和与另外一个数的异或值最大,输出这个最大值. 思路:和前面那个百度之星资格赛HDU4825的类似,多了两个过程,一个是枚举和,另一 ...
- HDU 5536 字典树
题意:就是公式. 这现场赛O(n^3)能过,觉得太没天理了. 做法:字典树,枚举两个数,然后在字典树上贪心的跑. #include <bits/stdc++.h> using namesp ...
- HDU 5687 Problem C 【字典树删除】
传..传送:http://acm.hdu.edu.cn/showproblem.php?pid=5687 Problem C Time Limit: 2000/1000 MS (Java/Others ...
- HDU 5687 字典树插入查找删除
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...
- HDU 5687 字典树入门
Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
随机推荐
- /etc/hosts导致的问题
今天安装完成orzdba之后,执行./orzdba -l 报如下错误: Usage: Socket::inet_ntoa(ip_address_sv) at /var/lib/mysql/trunk/ ...
- Log4j日志记录
1.导入log4j的jar包 2.写log4j.properties文件,配置日志记录参数,一般参数如下所示: 第二行指定了输出日志的目录,此处用的相对路径,也可换成绝对路径: 第三行指定了输出的记录 ...
- YARN运行流程
- Bitter.Core系列 十二 :Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 支持的 where 条件表达式
Bitter.Core 内置了支持大部分的 linq 的条件表达式.基本上符合我们 where 条件所需.Bitter.Core 的支持 表达式内置 扩展 有: EndsWith 在Sql 解 ...
- Fixing SQL Injection: ORM is not enough
Fixing SQL Injection: ORM is not enough | Snyk https://snyk.io/blog/sql-injection-orm-vulnerabilitie ...
- autoreload 线程 进程管理 并发的处理方法
Django autoreload https://github.com/django/django/blob/9386586f31b8a0bccf59a1bff647cd829d4e79aa/dj ...
- Centos虚拟机上安装部署Tenginx,以及部署过程中遇到的问题
Tenginx下载网址: Tenginx 官网地址:http://tengine.taobao.org/ Tenginx的官方网址中可以阅读Nginx的文档,可以选择中文进行阅读.下载Tengine- ...
- Mysql 四种事务隔离级别
一.前提 时过一年重新拾起博文记录,希望后面都能坚持下来. 接着之前MySql的学习,先记录下这篇. 以下都是基于mysql8 innodb存储引擎进行分析的. 二.事务的ACID特性 A(Atomi ...
- 静电、浪涌与TVS
ESD和浪涌问题往往是基带工程师最头疼的问题,因为测试标准严苛,问题神出鬼没.特别是ESD问题,没有解决问题的标准路径,只能靠反复地构思方案并验证.想要尽量避免以上问题,就必须选择合适的防护器件,设计 ...
- LOJ10145郁闷的出纳员
传送门:https://loj.ac/problem/10145 简单的平衡树 ------------------------------------ 1 #include<bits/stdc ...