COJ 1216 异或最大值
来源:互联网 发布:鬼气凛然实体书淘宝 编辑:程序博客网 时间:2024/05/18 18:16
题目大意:
从N个数中选取两个数,使得异或值最大。
建立字母树,对于每个数贪心的找与它异或值最大的那个,复杂度为O(32 * n)。详情 参见莫涛PPT 《高斯消元解异或方程组》
#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <vector>#include <queue>#include <set>#include <algorithm>#define LL long long using namespace std;const int MAXN = 3200010;int Next[MAXN][2];int End[MAXN];int A[100010];int root, L;int newnode(){ for(int i=0;i<2;i++) Next[L][i] = -1; End[L] = -1; return L++;}int cal(int x){ int cur = 0; for(int i=30;i;i--) { int k = ((1 << i) & x) ? 0 : 1; if(Next[cur][k] != -1) cur = Next[cur][k]; else cur = Next[cur][1 - k]; } //cout << cur << ' ' << End[cur] << Endl; return (x ^ End[cur]);}int main(){ int n, x; while(scanf("%d", &n)!=EOF) { L = 0, root = newnode(); for(int i=1;i<=n;i++) { scanf("%d", &x);A[i] = x; int now = 0; for(int j=30;j;j--) { int k = ((1 << j) & x) ? 1 : 0; if(Next[now][k] == -1) Next[now][k] = newnode(); now = Next[now][k]; } End[now] = x; // cout << now << ' ' << End[now] << Endl; } int ans = 0; for(int i=1;i<=n;i++) ans = max(ans, cal(A[i])); printf("%d\n", ans); } return 0;}
0 0
- COJ 1216 异或最大值
- COJ-1216 异或最大值
- 中南大学COJ 1216: 异或最大值(数据结构)
- COJ 1216 最大异或值
- CSU 1216 异或最大值
- csu-1216: 异或最大值
- CSUOJ 1216 异或最大值 (01Trie)
- CSU 1216 —— 异或最大值
- CSU 1216 异或最大值【字典树】
- CSU 1216 异或最大值 01trie
- CSU 1216 异或最大值(01Trie)
- 异或最大值
- CSU_1216【异或最大值】
- CSU_1216(异或最大值)
- CSU-1216: 异或最大值-trie-01字典树
- CSU 1216: 异或最大值(字典树+贪心)
- 异或最大值(01字典树)
- 【GZOJ】1314——异或最大值
- 二路归并算法的实现方法,用到vector容器
- #1014 : Trie树
- python模拟浏览器登录人人网,并使用代理IP和发送表单数据
- 枚举 到底是不是构造类型???
- 安卓:IntentService实现网络下载图片并写入到SD卡
- COJ 1216 异或最大值
- KVO
- svn cleanup failed错误的解决方法
- BestCoder#57 Conturbatio
- Mongodb之JavaApi调用例子
- 视图
- PRelu--Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
- 复杂指针的声明
- jQuery源码分析之jQuery.cleanData和jQuery.removeData以及jQuery._removeData十五问