hdu 5536 01字典树的删减
来源:互联网 发布:php计算提交数的和 编辑:程序博客网 时间:2024/05/02 04:44
Chip Factory
Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 3409 Accepted Submission(s): 1494
Problem Description
John is a manager of a CPU chip factory, the factory produces lots of chips everyday. To manage large amounts of products, every processor has a serial number. More specifically, the factory produces n chips today, the i-th chip produced this day has a serial number si.
At the end of the day, he packages all the chips produced this day, and send it to wholesalers. More specially, he writes a checksum number on the package, this checksum is defined as below:
maxi,j,k(si+sj)⊕sk
which i,j,k are three different integers between 1 and n. And ⊕ is symbol of bitwise XOR.
Can you help John calculate the checksum number of today?
Input
The first line of input contains an integer T indicating the total number of test cases.
The first line of each test case is an integer n, indicating the number of chips produced today. The next line has n integers s1,s2,..,sn, separated with single space, indicating serial number of each chip.
1≤T≤1000
3≤n≤1000
0≤si≤109
There are at most 10 testcases with n>100
Output
For each test case, please output an integer indicating the checksum number in a line.
Sample Input
2
3
1 2 3
3
100 200 300
Sample Output
6
400
Source
2015ACM/ICPC亚洲区长春站-重现赛(感谢东北师大)
给你n个数,找出i,j,k满足 (ai+aj) ^ak最大
枚举i j即可
进行增加删减即可
#include <bits/stdc++.h>using namespace std;const int N = 101000;const int BB = 32;struct node{ int nxt[2],val;}T[N*BB+1];int sz;int a[N+10];void insert(int d,int val){ int p=0; for(int i=31;i>=0;i--) { int dd=(d>>i)&1; if(!T[p].nxt[dd]) T[p].nxt[dd]=++sz; p=T[p].nxt[dd]; T[p].val+=val; }}int ask(int x){ int ans=0; int p=0; for(int i=31;i>=0;i--) { int dd=(x>>i)&1; if(T[T[p].nxt[1-dd]].val>0) p=T[p].nxt[1-dd],ans|=(1<<i); else if(T[T[p].nxt[dd]].val>0) p=T[p].nxt[dd]; else break; } return ans;}int main(){ int t; scanf("%d",&t); while(t--){ sz=0; int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); insert(a[i],1); } int maxx=0; for(int i=1;i<=n;i++) { insert(a[i],-1); for(int j=i+1;j<=n;j++) { insert(a[j],-1); int res=a[i]+a[j]; insert(a[j],1); maxx=max(maxx,ask(res) ); cout<<maxx<<endl; } insert(a[i],1); } printf("%d\n",maxx ); }}
- hdu 5536 01字典树的删减
- HDU 5536 01字典树
- hdu 5536 字典树
- HDU - 5536 字典树
- HDU 5536 Chip Factory 带删除的01字典树
- *hdu 5536(字典树的运用)
- HDU 5536 Chip Factory 01字典树
- HDU 5536 Chip Factory(01字典树)
- HDU 5536(01字典树)
- HDU 5536 Chip Factory 【01字典树】
- hdu 5269 01字典树
- hdu 4825 01字典树
- HDU 4825 01字典树
- HDU 6059 01字典树
- 数组中数据的删减
- HDU 5536 Chip Factory(暴力 or 01字典树)
- hdu 5536 Chip Factory(01字典树)
- HDU 5536 Chip Factory(暴力/01字典树)
- CCF201403-1 相反数(解法三)(100分)
- Apache源码目录结构
- java虚拟机内存
- 用js实现旋转轮播图
- PAT A1119. Pre- and Post-order Traversals (30)
- hdu 5536 01字典树的删减
- Pycharm使用技巧:Split Vertically/Horizontally(垂直/水平拆分窗口)
- JS中使用var fso = new ActiveXObject("LoadingOilICCard.ICCardActiveX");报automation服务器不能创建对象
- Win7系统如何设置任务栏按钮始终合并
- hdu6198 number number number【找规律+矩阵快速幂】
- Apache和tomcat
- [C++::STL]之stcak的用法
- 树莓派ssh连接 突然就断了
- Android Framework层的理解