csu1216( Trie )
csu1216
题意
给定一些数,求这些数中两个数的异或值最大的那个值。
分析
转化成二进制数存入字典树,比如说要查询 \(0011\) ,显然和 \(1100\) 结合最优,所以我们直接在字典树上寻找 \(1100\) ,如果某一位没找到不管它继续往下找,因为我们是从高到低位存的,所以找得到的一定是最优的。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;
const int MAXN = 2e6 + 10;
int n;
int ans;
int bit[32];
struct Trie {
    int nxt[MAXN][2];
    int root, L;
    int newnode() {
        nxt[L][0] = nxt[L][1] = 0;
        return L++;
    }
    void init() {
        L = 1;
        root = newnode();
    }
    void insert(int x) {
        int tmp[32];
        memset(tmp, 0, sizeof tmp);
        int c = 0;
        while(x) {
            tmp[c++] = x % 2;
            x >>= 1;
        }
        int now = root;
        for(int i = 30; i >= 0; i--) {
            int d = tmp[i];
            if(!nxt[now][d]) nxt[now][d] = newnode();
            now = nxt[now][d];
        }
    }
    void query(int x) {
        int tmp[32];
        memset(tmp, 0, sizeof tmp);
        int c = 0;
        while(x) {
            tmp[c++] = !(x % 2);
            x >>= 1;
        }
        for(int i = c; i <= 30; i++) {
            tmp[i] = 1;
        }
        int now = root;
        int res = 0;
        for(int i = 30; i >= 0; i--) {
            int d = tmp[i];
            if(nxt[now][d]) res += bit[i];
            else d = !d;
            now = nxt[now][d];
        }
        ans = max(ans, res);
    }
}trie;
int main() {
    bit[0] = 1;
    for(int i = 1; i < 31; i++) {
        bit[i] = bit[i - 1] * 2;
    }
    while(~scanf("%d", &n)) {
        trie.init();
        ans = 0;
        for(int i = 0; i < n; i++) {
            int x;
            scanf("%d", &x);
            trie.query(x);
            trie.insert(x);
        }
        printf("%d\n", ans);
    }
    return 0;
}
csu1216( Trie )的更多相关文章
- 【python】Leetcode每日一题-前缀树(Trie)
		[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ... 
- LA3942-Remember the Word(Trie)
		题意: 有s个不同的单词,给出一个长字符串把这个字符串分解成若干个单词的连接(可重复使用),有多少种分解方法 分析: dp[i]表示i开始的字符串能分解的方法数 dp[i]=sum(dp[i+len( ... 
- HDU 1671 Phone List  (Trie)
		pid=1671">Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ... 
- hdu 1251 统计难题 (字典树(Trie)<PS:C++提交不得爆内存>)
		统计难题Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submis ... 
- 字典树(Trie)的java实现
		一.定义 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用 ... 
- HDU 4825-Xor Sum(trie)
		题意: 给你一组数,开始询问给一个数 求组中与该数异或值最大的数. 分析:根据异或的特点 要想得到的异或值最大 尽可能的让两个数的每位都相反 先把给定的一组数建树,数的最后一位对应的节点保存这个数的 ... 
- 【UER #1】跳蚤OS(Trie)
		跳蚤OS 是跳蚤国自主研发的功能强大的操作系统. 跳蚤OS的文件系统与普通的文件系统类似,是个文件夹套文件夹的结构.文件系统根目录称为“//”.我们可以用文件路径来表明文件所在的位置,比如“/flea ... 
- UVA - 11732 "strcmp()" Anyone? (trie)
		https://vjudge.net/problem/UVA-11732 题意 给定n个字符串,问用strcmp函数比较这些字符串共用多少次比较. strcmp函数的实现 int strcmp(cha ... 
- hihoCoder 1014 Trie树  (Trie)
		#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho是一对好朋友.出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮 ... 
随机推荐
- P4467 [SCOI2007]k短路
			题目描述 有 n 个城市和 m 条单向道路,城市编号为 1 到 n .每条道路连接两个不同的城市,且任意两条道路要么起点不同要么终点不同,因此 n 和 m 满足 m \le n(n-1)m≤n(n−1 ... 
- [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania
			[2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ... 
- 为什么比IPVS的WRR要好?
			动机 五一临近,四月也接近尾声,五一节乃小长假的最后一天.今天是最后一天工作日,竟然感冒了,半夜里翻来覆去无法安睡,加上窗外大飞机屋里小飞机(也就是蚊子)的骚扰,实在是必须起来做点有意义的事了! ... 
- [Leetcode] Populating next right pointer in each node ii 填充每个节点的右指针
			Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ... 
- [Leetcode] Palindrome number 判断回文数
			Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ... 
- BZOJ2819 Nim  【dfn序 + lca + 博弈论】
			题目 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略的. ... 
- Treap 模板
			感觉平衡树也没有以前想的那么玄乎,(其实set超好用的),非旋式Treap挺好理解,和可并堆,二叉搜索树有很大联系 推荐博客:http://memphis.is-programmer.com/post ... 
- RTL2832U+R820T电视棒windows下安装sdr# 以及搭建ADS-B使用VirtualRadar看飞机的教程
			本文中提到的软件随后我会打包给出下载地址.这篇文章是我根据网上的教程和自己的经验修改的详细版本,为了方便入门新手.先来说说RTL2832U+R820T在windows下安装sdr#的方法.首先科普下s ... 
- codevs 1078 最小生成树 kruskal
			题目描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 约翰已经给他的农场安排了一条高速的网络线路,他想把这 ... 
- HDU 5666  快速乘
			Segment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ... 
