codeforces 1285D. Dr. Evil Underscores(字典树)
链接:https://codeforces.com/problemset/problem/1285/D
题意:给n个数a1,a2,a3.....an,找到一个数X,使得X 异或所有的ai ,得到的max(X xor ai)最小,输出这个值。
思路:a的范围是0~230,我们可以以01二进制的形式建一棵深度为30的字典树,每个数ai 的二进制序列插入到字典树中去,例如5 = 101,那么101按位插入到字典树中去。然后从根开始遍历,在字典树上dp,因为该字典树建完后是一棵二叉树,所以分支情况就两种,下一位是0或1,那么如果只遇到1就往1这个分支走,这一位便没有贡献,如果只遇到0就往0这个分支走,这一位也没有贡献,如果遇到的是0和1两个分支,那么必定要加上这一位的贡献,然后递归01两个分支,两者再去min,一直递归到最后一位。
AC代码:
#include<iostream>
#include<vector>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<map>
using namespace std;
typedef long long ll;
int trie[][],cnt ;
//bool exist[31*31];// 该结点结尾的字符串是否存在
void insert(int a){//建trie树
int p = ;
for(int i = ;i>=;i--){
int c = (a>>i)&;
if(!trie[p][c]) trie[p][c] = ++cnt; // 如果没有,就添加结点
p = trie[p][c];
}
// exist[p] = 1;
}
ll solve(ll cur,int k){
if(k == -) return ;
if(trie[cur][] == ){
return solve(trie[cur][],k-);
}
else if(trie[cur][] == ){
return solve(trie[cur][],k-);
}
else{
return (<<k)+min(solve(trie[cur][],k-),solve(trie[cur][],k-));
}
}
int main()
{
int n;
cin>>n;
for(int i = ;i<n;i++){
ll a;cin>>a;
insert(a);
}
ll ans = solve(,);
cout<<ans;
return ;
}
codeforces 1285D. Dr. Evil Underscores(字典树)的更多相关文章
- CF1285 --- Dr. Evil Underscores
CF1285 --- Dr. Evil Underscores 题干 Today as a friendship gift, Bakry gave Badawy \(n\) integers \(a_ ...
- DFS-B - Dr. Evil Underscores
B - Dr. Evil Underscores Today, as a friendship gift, Bakry gave Badawy nn integers a1,a2,…,ana1,a2, ...
- CodeForces 706D Vasiliy's Multiset (字典树查询+贪心)
题意:最开始的时候有一个集合,集合里面只有一个元素0,现在有q次操作,操作分为3种: + x: 表示向集合中添加一个元素x - x:表示删除集合中值为x的一个元素 ? x:表示查询集合中与x异或的最大 ...
- codeforces gym #101161F-Dictionary Game(字典树+树上删边游戏)
题目链接: http://codeforces.com/gym/101161/attachments 题意: 给一个可以变化的字典树 在字典树上删边 如果某条边和根节点不连通那么这条边也删除 谁没得删 ...
- Codeforces 577E Ann and Half-Palindrome 字典树
题目链接 题意: 若一个字符串是半回文串.则满足第一位和最后一位相等, 第三位和倒数第三位相等.如此类推. 给定一个字符串s,输出s的全部子串中的半回文串字典序第k大的 字符串. good[i][j] ...
- C - Dr. Evil Underscores CodeForces - 1285D 二进制
题目大意:n个数,任意整数x对这n个数取异或值,然后使最大值最小. 思路:数据范围最大为pow(2,30);所以考虑二进制的话,最多有30位.对于某一位d,然后考虑数组v中每一个元素的d为是0还是1, ...
- CF1285D Dr. Evil Underscores
挂个链接 Description: 给你 \(n\) 个数 \(a_1,a_2,--,a_n\) ,让你找出一个 \(x\) ,使 \(x\) 分别异或每一个数后得到的 \(n\) 个结果的最大值最小 ...
- codeforces 706D (字典树)
题目链接:http://codeforces.com/problemset/problem/706/D 题意:q次操作,可以向多重集中增添,删除,询问异或最大值. 思路:转化为二进制用字典树存储,数字 ...
- Codeforces Round #311 (Div. 2) E. Ann and Half-Palindrome 字典树/半回文串
E. Ann and Half-Palindrome Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
随机推荐
- css过渡——实现元素的飞入飞出
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [PAT] A1022 Digital Library
[题目大意] 给出几本书的信息,包括编号,名字,出版社,作者,出版年份,关键字:然后给出几个请求,分别按照1->名字,2->出版社等对应信息查询符合要求的书的编号. [思路] 模拟. [坑 ...
- win10下以管理员身份打开hosts文件
第一步: 第二步: 第三步:先后执行两个命令cmd notepad hosts 最后一步:在记事本中修改host文件
- LeetCode 704. 二分查找
题目链接:https://leetcode-cn.com/problems/binary-search/ 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函 ...
- NOI Online能力测试游记:退役选手的自娱自乐
2020年2月17日早上8点,CCF发布了关于举办NOI Online能力测试的通知. 为给选手提供一个锻炼的机会,CCF拟举办一场NOI Online能力测试.测试分为入门组和提高组,每组限额报名3 ...
- maven依赖报红的一些解决办法
使用IDEA集成maven管理项目依赖时,经常出现更改pom文件后maven依赖列表并未更改,且依赖报红,此时建议检查maven配置文件maven仓库是否下载好jar包,如果未下载好jar包文件夹内会 ...
- Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class 消费者提示需要配置数据源
使用 由于给前端做分页 在启动消费者的时候遇到了这个问题 Failed to configure a DataSource: 'url' attribute is not specified and ...
- java学习笔记之IO编程—打印流和BufferedReader
1.打印流(PrintWriter) 想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一 ...
- HBase Hive
Hbase数据管理 Hbase就是Hadoop database Hbase是列式数据库 因此Hbase特别适合寻找按照时间排序寻找Top n的场景 Hive数据管理 基于 Hadoop 文件系统的数 ...
- gcc,g++,make,cmake的区别
首先介绍一下GCC:GNU Compiler Collection(GNU 编译器集合),在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是 ...