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 ...
随机推荐
- 【JS学习】for-in与for-of
前言:本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述: 名称 遍历 适用 for-in 索引 主要建议白能力对 ...
- 分别使用 Python 和 Math.Net 调用优化算法
1. Rosenbrock 函数 在数学最优化中,Rosenbrock 函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock 在 1960 年提出 .也称为 R ...
- 【Linux】ethtool 用法
ethtool命令用于获取以太网卡的配置信息,或者修改这些配置.这个命令比较复杂,功能特别多. 语法 ethtool [ -a | -c | -g | -i | -d | -k | -r | -S | ...
- 【Linux】服务器识别ntfs移动磁盘方法
Linux服务器无法识别ntfs磁盘 如果想识别的话,需要安装一个包ntfs-3g 安装好后,将移动磁盘插入到服务器的usb口中 新建一个目录,将磁盘挂载在新建的目录上 挂载命令如下: mount - ...
- 【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
任务描述 本次集中介绍使用Windows和Linux()搭建本地Redis服务器的步骤,从备份的RDB文件中加载数据,以及如何生成AOF文件和通过AOF文件想已经运行的Redis追加数据. 操作步骤 ...
- python_mmdt:一种基于敏感哈希生成特征向量的python库(一)
概述 python_mmdt是一种基于敏感哈希的特征向量生成工具.核心算法使用C实现,提高程序执行效率.同时使用python进行封装,方便研究人员使用. 本篇幅主要介绍涉及的相关基本内容与使用,相关内 ...
- Property or method "previewUrl" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components,
Property or method "previewUrl" is not defined on the instance but referenced during rende ...
- fiddler常用过滤
一.过滤器 过滤这块集中在request栏目的Filter部分,可以根据自己的需要过滤掉不需要的,里面的每个模块都可以设置,这里只说常用的和注意点. 1.假如我只关心某个域名下的抓包,这时可以利用fi ...
- 订单业务楼层化 view管理器和model管理器进行了model和view的全面封装处理 三端不得不在每个业务入口上线时约定好降级开关,于是代码中充满了各种各样的降级开关字段
京东APP订单业务楼层化技术实践解密 原创 杜丹 留成 博侃 京东零售技术 2020-09-29 https://mp.weixin.qq.com/s/2oExMjh70Kyveiwh8wOBVA 用 ...
- Springboot中mybatis控制台打印sql语句
Springboot中mybatis控制台打印sql语句 https://www.jianshu.com/p/3cfe5f6e9174 https://www.jianshu.com/go-wild? ...