题意:

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. 【JS学习】for-in与for-of

    前言:本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述: 名称 遍历 适用 for-in 索引 主要建议白能力对 ...

  2. 分别使用 Python 和 Math.Net 调用优化算法

    1. Rosenbrock 函数 在数学最优化中,Rosenbrock 函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock 在 1960 年提出 .也称为 R ...

  3. 【Linux】ethtool 用法

    ethtool命令用于获取以太网卡的配置信息,或者修改这些配置.这个命令比较复杂,功能特别多. 语法 ethtool [ -a | -c | -g | -i | -d | -k | -r | -S | ...

  4. 【Linux】服务器识别ntfs移动磁盘方法

    Linux服务器无法识别ntfs磁盘 如果想识别的话,需要安装一个包ntfs-3g 安装好后,将移动磁盘插入到服务器的usb口中 新建一个目录,将磁盘挂载在新建的目录上 挂载命令如下: mount - ...

  5. 【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据

    任务描述 本次集中介绍使用Windows和Linux()搭建本地Redis服务器的步骤,从备份的RDB文件中加载数据,以及如何生成AOF文件和通过AOF文件想已经运行的Redis追加数据. 操作步骤 ...

  6. python_mmdt:一种基于敏感哈希生成特征向量的python库(一)

    概述 python_mmdt是一种基于敏感哈希的特征向量生成工具.核心算法使用C实现,提高程序执行效率.同时使用python进行封装,方便研究人员使用. 本篇幅主要介绍涉及的相关基本内容与使用,相关内 ...

  7. 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 ...

  8. fiddler常用过滤

    一.过滤器 过滤这块集中在request栏目的Filter部分,可以根据自己的需要过滤掉不需要的,里面的每个模块都可以设置,这里只说常用的和注意点. 1.假如我只关心某个域名下的抓包,这时可以利用fi ...

  9. 订单业务楼层化 view管理器和model管理器进行了model和view的全面封装处理 三端不得不在每个业务入口上线时约定好降级开关,于是代码中充满了各种各样的降级开关字段

    京东APP订单业务楼层化技术实践解密 原创 杜丹 留成 博侃 京东零售技术 2020-09-29 https://mp.weixin.qq.com/s/2oExMjh70Kyveiwh8wOBVA 用 ...

  10. Springboot中mybatis控制台打印sql语句

    Springboot中mybatis控制台打印sql语句 https://www.jianshu.com/p/3cfe5f6e9174 https://www.jianshu.com/go-wild? ...