HDU 5536 Chip Factory
Chip Factory
Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 620 Accepted Submission(s): 318
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
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
struct Trie {
int ch[maxn][],cnt[maxn],tot;
int newnode() {
cnt[tot] = ch[tot][] = ch[tot][] = ;
return tot++;
}
void init() {
tot = ;
newnode();
}
void update(int v,int d,int rt = ) {
for(int i = ; i >= ; --i) {
int c = (v>>i)&;
if(!ch[rt][c]) ch[rt][c] = newnode();
rt = ch[rt][c];
cnt[rt] += d;
}
}
int match(int v,int rt = ,int ret = ) {
for(int i = ; i >= ; --i) {
int c = (v>>i)&;
if(ch[rt][c^] && cnt[ch[rt][c^]]) {
ret |= <<i;
rt = ch[rt][c^];
} else rt = ch[rt][c];
}
return ret;
}
}T;
int a[maxn];
int main() {
int kase,n,ret;
scanf("%d",&kase);
while(kase--){
scanf("%d",&n);
T.init();
for(int i = ; i < n; ++i){
scanf("%d",a + i);
T.update(a[i],);
}
for(int i = ret = ; i < n; ++i){
T.update(a[i],-);
for(int j = i + ; j < n; ++j){
T.update(a[j],-);
ret = max(ret,T.match(a[i] + a[j]));
T.update(a[j],);
}
T.update(a[i],);
}
printf("%d\n",ret);
}
return ;
}
最新文章
- 都别说工资低了,我们来一起写简单的dom选择器吧!
- 二十五、JDK1.5新特性---枚举
- 禁用 baloo_file_extractor 加速 ubuntu 14.04 (KDE)
- tarjan求桥、割顶
- Java [leetcode 22]Generate Parentheses
- GUI编程笔记(java)05:GUI事件监听机制原理和举例说明
- 去掉Visual Studio 编辑器里中文注释的红色波浪线 转载
- 有效解决js中添加border后动画bug问题
- [BZOJ 3052] [wc2013] 糖果公园 【树上莫队】
- sort 命令
- 秒味课堂Angular js笔记------指令
- 【课上OJ】掉入陷阱的数
- Windows提供了两种将DLL映像到进程地址空间的方法
- Java如何调取创蓝253短信验证码
- UNIX环境高级编程——线程同步之条件变量以及属性
- tomcat用redis做session共享
- python+unittet在linux与windows使用的区别
- mysql分组查询获取组内某字段最大的记录
- 性能测试常用的linux命令
- iOS开发之--如何修改TabBarItem的title的字体和颜色/BarButtonItem的title的字体大小和颜色/添加背景图片,并添加点击方法
热门文章
- SQL SERVER 2008中使用VARBINARY(MAX)进行图像存取的实现方法
- win10安装CAD后出现致命错误
- Android 6.0 运行时权限处理完全解析 (摘抄)
- JAVA的程序基本结构和数据类型
- 通过StringBuilder的reverse()实现倒序
- UVA 1349 Optimal Bus Route Design (二分图最小权完美匹配)
- Python 入门基础
- javascript(函数式编程思考) --->; Map-Filter-quicksort-Collatz序列-Flodl-Flodr
- Redis数据库(一)
- Linux&ndash;varnish(一)