HDU5536 Chip Factory(字典树)
来源:互联网 发布:软件评分表 编辑:程序博客网 时间:2024/06/17 00:34
题解:
给n个数字从中选择三个数字a[i],a[j],a[k],使得a[i]+a[j]异或a[k]最大
建一个字典树,枚举a[i]+a[j],删除之后查找然后再插回到字典树中,往相反的方向走,没有则同方向走
代码
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;int max(int a,int b){ if (a>=b) return a; else return b;}const int maxn = 500050;int Next[maxn][2];int word[maxn];struct Tree{ int L,root; void init() { L = 0; root = newnode(); } int newnode() { for (int i = 0;i<2;i++) Next[L][i] = -1; word[L++] = 0; return L-1; } void insert(int val) { int u = root,v; for (int i = 31;i>=0;i--) { v = (val & (1<<i))?1:0; if (Next[u][v] == -1) Next[u][v] = newnode(); u = Next[u][v]; word[u]++; } } void Delete(int val) { int u = root,v; for (int i = 31;i>=0;i--) { v = (val & (1<<i))?1:0; u = Next[u][v]; word[u]--; } } int query(int val) { int u = root,v; for (int i = 31;i>=0;i--) { v = (val & (1<<i))?1:0; if (v==1) { if (Next[u][0] != -1 && word[Next[u][0]]) u = Next[u][0]; else { u = Next[u][1]; val^=(1<<i); } } else { if (Next[u][1] != -1 && word[Next[u][1]]) { u = Next[u][1]; val ^= (1<<i); } else u = Next[u][0]; } } return val; }};int a[1005];int main(){ int T; scanf("%d",&T); while (T--) { Tree tree; tree.init(); int n; scanf("%d",&n); for (int i = 0;i<n;i++) { scanf("%d",&a[i]); tree.insert(a[i]); } int ans = 0; for ( int i = 0;i<n;i++) { tree.Delete(a[i]); for (int j = i+1;j<n;j++) { tree.Delete(a[j]); ans = max(tree.query(a[i]+a[j]),ans); tree.insert(a[j]); } tree.insert(a[i]); } printf("%d\n",ans); memset(a,0,sizeof(a)); }}
题目
Chip Factory
Time Limit:9000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
HDU 5536
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
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:
which
Can you help John calculate the checksum number of today?
Input
The first line of input contains an integer
The first line of each test case is an integer
There are at most
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
- HDU5536 Chip Factory(字典树)
- HDU5536 Chip Factory 【字典树】
- HDU5536 chip factory 【01字典树】
- HDU5536 Chip Factory(01字典树)
- HDU5536:Chip Factory(字典树)
- HDU5536 Chip Factory Trie(01字典树)
- hdu5536 Chip Factory (01字典树删除操作)
- HDU5536 Chip Factory(trie树)
- 【HDU5536 2015长春赛区 J】【字典树or暴力】Chip Factory 字典序做法+暴力做法
- HDU5536 Chip Factory(Trie树,二进制)
- hdu5536 Chip Factory
- hdu5536 Chip Factory (暴力+优化)
- hdu5536 Chip Factory(Tire)
- hdu5536 Chip Factory (异或最大值)
- hdoj 5536 Chip Factory 【字典树】
- hdu 5536 Chip Factory 字典树
- HDU 5536 Chip Factory 01字典树
- HDU-5536 Chip Factory(字典树)
- POJ 1611 The Suspects
- B. Drazil and His Happy Friends
- 数据预处理之独热编码(One-Hot Encoding)
- Java源码之HashMap
- 【UEditor】百度UE富文本自定义按钮添加文本
- HDU5536 Chip Factory(字典树)
- Codeforces Round 610
- The connection to adb is down, and a severe error has occured.的错误.
- Django+Query
- 离散数学及其应用 前言
- 【SQL server】更新与删除
- 对象封装属性的真正源头
- C语言 calloc, malloc, realloc ,alloca以及 free的用法
- leetcode 143. Reorder List