中南大学COJ 1216: 异或最大值(数据结构)

来源:互联网 发布:js查看某个属性值 编辑:程序博客网 时间:2024/05/17 02:21

中南大学COJ 1216: 异或最大值(数据结构)

ACM

题目地址:COJ 1216

题意: 
中文题,注意是多组样例。

分析: 
用01Trie做的。

代码

/**  Author:      illuz <iilluzen[at]gmail.com>*  File:        coj1216.cpp*  Create Date: 2014-07-27 14:18:44*  Descripton:  trie*/#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int N = 100000<<5;struct Trie {int a[2];int num;} f[N];int cnt, ans;// insert x into the root which id is u, the deep is numvoid insert(int x, int u, int num) {bool k;for (int i = num; i >= 0; i--) {k = (1<<i)&x;if (f[u].a[k] == -1)f[u].a[k] = ++cnt;u = f[u].a[k];}f[u].num = x;}// query xorvoid query(int x, int u, int num) {bool k;for (int i = num; i >= 0; i--) {k = (1<<i)&x;if (f[u].a[!k] != -1)u = f[u].a[!k];elseu = f[u].a[k];}ans = max(ans, f[u].num^x);}int main() {int n, t;while (~scanf("%d", &n)) {memset(f, -1, sizeof(Trie) * N);cnt = 0;ans = 0;while (n--) {scanf("%d", &t);insert(t, 0, 31);query(t, 0, 31);}printf("%d\n", ans);}return 0;}


2 0