题意:

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. selenium自动化 | 实现抢课功能

    # -*- coding: utf-8 -*-"""Created on Wed Jan 1 23:39:34 2020@author: billie程序运行环境要求:- ...

  2. 断言封装之key检查及kv实战示例

    ️️️️️️️️️️️️️️️️️️️️️️️️️️️️️ 测试: 断言处理: demo_04.pyimport jsonjson_obj = {"access_token":&q ...

  3. Mac pycharm更换版本后打不开

    1.第一步:先输入:   cd /Applications/PyCharm.app/Contents/MacOS 2.第二步:查看无法打开pycharm的原因,需要输入:c./pycharm 3.第三 ...

  4. HarmonyOS三方件开发指南(5)——Photoview组件

    PhotoView使用说明 1.  PhotoView功能介绍1.1 组件介绍:        PhotoView是一个继承自Image的组件,不同之处在于:它可以进行图击放大功能,手势缩放功能(暂无 ...

  5. kubernets之DaemonSet

    一  k8s资源之DaemonSet 1.1 介绍认识DaemonSet DaemonSet可以理解为一种比较特殊的RS,DaemonSet的作用是永远保持被指定的节点只运行一个pod的副本,可用作集 ...

  6. SpringMVC下关于静态资源访问

    SpringMVC静态资源访问 聊一聊关于静态资源的访问问题 首先,我们要对web.xml里面的DispatcherServlet进行设置 <!-- 中央调度器--> <servle ...

  7. OpenCV 和 Dlib 人脸识别基础

    00 环境配置 Anaconda 安装 1 下载 https://repo.anaconda.com/archive/ 考虑到兼容性问题,推荐下载Anaconda3-5.2.0版本. 2 安装 3 测 ...

  8. Vue3 源码之 reactivity

    注: 为了直观的看到 Vue3 的实现逻辑, 本文移除了边缘情况处理.兼容处理.DEV环境的特殊逻辑等, 只保留了核心逻辑 vue-next/reactivity 实现了 Vue3 的响应性, rea ...

  9. # from tall import b from tall import * print(b) __all__ 模块 引用管理

    ├── __init__.py├── tall2.py└── tall.pytall.pya = 23b = 34class I: def __init__(self): print(444)clas ...

  10. tcp服务器

    如同上面的电话机过程一样,在程序中,如果想要完成一个tcp服务器的功能,需要的流程如下: socket创建一个套接字 bind绑定ip和port listen使套接字变为可以被动链接 accept等待 ...