hdu5536 Chip Factory (异或最大值)
来源:互联网 发布:linux vi 修改文件 编辑:程序博客网 时间:2024/05/18 12:29
题目:
给 n 个数,从中选出
分析:
看见异或就换二进制。
枚举
注意字典树不一定非要对字符串操作,没必要把数字先变成字符串再操作。对于x, 逐位 x&(1 << i) 就可以得到每一位。同时,找的时候可以直接算出答案,而不用把最优串存下来再算结果。不要拘泥于模板。
代码:
#include <iostream>#include <algorithm>#include <queue>#include <stack>#include <vector>#include <map>#include <set>#include <cmath>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;#define ms(a,b) memset(a,b,sizeof(a))#define lson rt*2,l,(l+r)/2#define rson rt*2+1,(l+r)/2+1,rtypedef unsigned long long ull;typedef long long ll;const int MAXN=1e3+5;const double EPS=1e-8;const int INF=0x3f3f3f3f;const int MOD = 1e9+7;struct Trie{ int n; Trie *next[2]; };Trie tree[MAXN*MAXN];int n,a[MAXN];char ans[MAXN];int tot=-1;void create(){ ++tot; tree[tot].n=0; for(int i=0;i<2;i++) tree[tot].next[i]=NULL;}void init(){ tot=-1; create();}void insert(int x){ Trie *r=&tree[0]; for(int i=30;i>=0;i--){ int k = (x & (1 << i)) > 0; if(r->next[k]){ r=r->next[k]; r->n++; } else{ create(); r->next[k]=&tree[tot]; r=&tree[tot]; r->n++; } }}void erase(int x){ Trie *r=&tree[0]; for(int i=30;i>=0;i--){ int k = (x & (1 << i)) > 0; r=r->next[k]; r->n--; }}int search(int x){ Trie* r=&tree[0]; int ret = 0; for(int i=30;i>=0;i--){ int k = !((x & (1 << i)) > 0); Trie* l1 = r->next[k],*l2 = r->next[1-k]; if(l1 && l1->n){ r = l1; ret += (1 << i); } else{ r = l2; } } return ret;}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); init(); for(int i=0;i<n;i++){ scanf("%d",&a[i]); insert(a[i]); } int Ans = 0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ erase(a[i]); erase(a[j]); Ans = max(Ans,search(a[i]+a[j])); insert(a[i]); insert(a[j]); } } printf("%d\n",Ans); } return 0;}
阅读全文
0 0
- hdu5536 Chip Factory (异或最大值)
- hdu5536 Chip Factory(Tire)
- HDU5536 Chip Factory(01字典树)
- HDU5536:Chip Factory(字典树)
- hdu5536 Chip Factory
- hdu5536 Chip Factory (暴力+优化)
- HDU5536 Chip Factory(字典树)
- HDU5536 Chip Factory(trie树)
- HDU5536 Chip Factory 【字典树】
- HDU5536 Chip Factory Trie(01字典树)
- hdu5536 Chip Factory (01字典树删除操作)
- HDU5536 chip factory 【01字典树】
- HDU5536 Chip Factory(Trie树,二进制)
- [HDU 5536] Chip Factory (trie树+异或)
- HDU 5536 Chip Factory——Trie + 异或运算
- 【HDU5536 2015长春赛区 J】【字典树or暴力】Chip Factory 字典序做法+暴力做法
- HDU5536 Chip Factory 被外表欺骗的水题 国庆咸鱼
- Chip Factory
- 欧洲之旅——触摸历史
- UBOOT源码详解之BL1第一阶段
- SSH远程执行Linux Shell命令
- element-ui安装使用
- solr学习第一步
- hdu5536 Chip Factory (异或最大值)
- 导入项目出现问题:An existing resource has been found at location
- openCV中视频的读入、RGB通道分离以及鼠标左击反馈位置、灰度
- MyEclipse编码设置
- SpiderMonkey js引擎的静态编译与使用
- 《Kotlin项目实战开发》第1章 Kotlin是什么
- Spring@Schedule定时任务源码解析
- 去除字典列表中的重复字典
- Makefile的使用