hdu 5536 Chip Factory 01trie+可删除
来源:互联网 发布:软件管家360官方下载 编辑:程序博客网 时间:2024/06/05 20:33
题目链接
题意:
求max( (a[i] + a[j])
思路:
这题可以暴力也可以01trie. 来说说01trie.
其实遇到异或求最大最小啊啥的都可以想01trie是否可做.
那么这个题肯定就是枚举两个和,然后跑01trie了.
关键是怎么解决下标不同的问题,这里解决办法是增加一个del函数,删除以某个前缀为数的个数.
即:num[]保存的是到该节点,以该前缀 的数的个数有多少,我们-1就相当于把这个数删除了.
具体见代码
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;const int maxn=1e5+10;typedef long long ll;int a[maxn];int n;int trie[maxn][3];int num[maxn];int now;void init(){ now = 1; memset(trie[0],0,sizeof trie[0]); return ;}void insert(int x)//插入 { int d = 0; for(int i = 31;i >= 0;--i) { int tmp = (x >> i) & 1;//傻逼错误啊 = = if(!trie[d][tmp]) { num[now] = 0; memset(trie[now],0,sizeof trie[now]); trie[d][tmp] = now++; } d = trie[d][tmp]; num[d]++; } return ;}void del(int x)//删除操作 { int d = 0; for(int i = 31;i >= 0;--i) { int tmp = (x >> i) & 1; d = trie[d][tmp]; num[d]--;//前缀个数-1即可 } return ;}int find(int x)//匹配 { int res = 0,d = 0; for(int i = 31;i >= 0;--i) { int tmp = (x >> i) & 1; if(trie[d][tmp^1] && num[trie[d][tmp^1]]) { res |= (1 << i); d = trie[d][tmp^1]; } else d = trie[d][tmp]; } return res;}int main(){ int _; cin>>_; while(_--) { scanf("%d",&n); init(); for(int i = 1;i <= n;++i) { scanf("%d",&a[i]); insert(a[i]); } int ans = 0; for(int i = 1;i <= n;++i) { del(a[i]); for(int j = i + 1;j <= n;++j) { del(a[j]); int s= a[i]+a[j]; ans = max(ans,find(s)); insert(a[j]); } insert(a[i]); } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- hdu 5536 Chip Factory 01trie+可删除
- hdu 5536 Chip Factory 01 Trie
- HDU 5536 Chip Factory (01Trie)
- HDU 5536 Chip Factory (枚举+01Trie)
- 01trie树 HDU 5536Chip Factory
- HDU 5536 Chip Factory 01trie
- HDU 5536 Chip Factory (暴力 或者 01Trie)
- HDU 5536 Chip Factory (暴力 或者 01Trie)
- HDU-5536:Chip Factory(Trie树)
- HDU 5536 Chip Factory 带删除的01字典树
- HDU 5536 (ACM 2015 长春) Chip Factory [Trie树]
- hdu 5536 Chip Factory 2015长春区域赛 数据结构 Trie
- [HDU 5536] Chip Factory (trie树+异或)
- HDU 5536 Chip Factory ACM/ICPC 2015 Changchun(Trie)
- HDU 5536 Chip Factory——Trie + 异或运算
- hdu 5536 Chip Factory
- HDU 5536 Chip Factory
- 【HDU】 5536 Chip Factory
- UVA 10533
- java复习笔记3
- go语言string、int、int64互相转换
- STM32-F407看门狗(3)
- 187. Repeated DNA Sequences
- hdu 5536 Chip Factory 01trie+可删除
- Java 内存管理
- C++构造函数
- C++输入带空格的字符串
- 1.Two Sum
- c/c++函数指针
- JAVA实训第二节(条件语句,循环和数组)
- 用户的身份证号和手机号验证
- 关于tensorflow的基本语法知识