CF1285D Dr. Evil Underscores 01Trie+贪心
给出 n n n个整数 a 1 , a 2 , … , a n a_1,a_2,\ldots,a_n a1,a2,…,an,要求选出一个整数 X X X,最小化 max 1 ≤ i ≤ n ( a i ⊕ X ) \underset{1 \leq i \leq n}{\max} (a_i \oplus X) 1≤i≤nmax(ai⊕X),输出这个最小值. 1 ≤ n ≤ 1 0 5 , 0 ≤ a i ≤ 2 30 − 1 1\leq n\leq 10^5,0\leq a_i\leq 2^{30}-1 1≤n≤105,0≤ai≤230−1.
这道题直接去构造 X X X,或者以 X X X为依据进行dp是有问题的(掉分的血泪教训,不再展开),而应该直接去贪心求这个最小值.
设最小值的答案是 A n s Ans Ans,对于第 i i i位,如果 n n n个数中第 i i i位为 0 0 0或 1 1 1都存在,那么 A n s Ans Ans就一定要加上 2 i 2^i 2i,也即 A n s Ans Ans的第 i i i位为 1 1 1.反之如果 0 0 0或 1 1 1有一个不存在,那么这一位取反就可使 A n s Ans Ans第 i i i位为 0 0 0.
因此我们可以建出Trie树,在树上从高位往低位进行贪心.对于第 i i i位的节点,如果左右儿子都有,这个节点答案就加上 2 i 2^i 2i,然后再对子树答案取 m i n {\rm min} min即可.时间复杂度就是Trie树的 O ( n log m a x a i ) O(n\log maxa_i) O(nlogmaxai),但空间多大不是很确定…
总之对于这种可以看出有贪心性质的题,就不要在一棵树上吊死了吧
我 演 我 自 己
#include<bits/stdc++.h>
#define ll long long
#define clr(x,i) memset(x,i,sizeof(x))
using namespace std;
const int N=100005;
const ll mod=1e9+7;
inline int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;
}
int n,a[N],ch[N*21][2],tot;
void ins(int x)
{int now=0;for(int i=30; i>=0; i--){bool t=(1<<i)&x;if(!ch[now][t]){ch[now][t]=++tot;ch[tot][0]=ch[tot][1]=0;}now=ch[now][t];}
}
int dfs(int now,int dep)
{int k0=ch[now][0],k1=ch[now][1],ret=0;if(!k0 && !k1) return 0;if(!k0 && k1) {int retR=dfs(ch[now][1], dep-1);return retR;}if(k0 && !k1) {int retL=dfs(ch[now][0], dep-1);return retL;}ret+=(1<<dep)+min(dfs(ch[now][0], dep-1), dfs(ch[now][1], dep-1));return ret;
}
void solve()
{n=read();for(int i=1; i<=n; i++){a[i]=read();ins(a[i]);}int ans=dfs(0, 30);printf("%d\n",ans);
}
int main()
{int T=1;while(T--) solve();
}
CF1285D Dr. Evil Underscores 01Trie+贪心相关推荐
- CodeForces - 1285D Dr. Evil Underscores(记忆化搜索+字典树)
题目链接:点击查看 题目大意:给出n个数字,现在要求出一个X,使得X与n个数字单独异或之后的最大值,输出这个最大值的最小值 题目分析:最大值的最小值,差点就以为是字典树+二分了,因为没有单调性然后就无 ...
- Dr. Evil Underscores(异或最大值最小)
Today, as a friendship gift, Bakry gave Badawy nn integers a1,a2,-,ana1,a2,-,an and challenged him t ...
- Dr. Evil Underscores
Today, as a friendship gift, Bakry gave Badawy nnn integers a1,a2,-,ana_1,a_2,-,a_na1,a2,-,an and ...
- Evil Coordinate(思维+贪心)
题目传送门 唉,这道题出的妙啊,本蒟蒻想破头皮也想不出来. 这道题感觉和我之前在cf做的一道题的思考方式(枚举方式)很类似 链接如下 类似题目传送门 怎么做呢? 当时的思路实际上就是想绕过这个地雷.但 ...
- 如何通过 HttpWebRequest 上传文件?
咨询区 dr. evil 我不希望通过 WebDAV 文件夹的方式上传文件,我想通过相关的 HttpWebRequest 类,类库或者代码片段来帮我模拟浏览器行为来上传文件,请问是否有好的解决方案? ...
- 集训队每周一赛2020-03-13(构造+找规律+字符串+并查集)
第三次周赛 A 飞 Gym 102416C 题解 B 流 CodeForces 1316B 题解 C 直 Gym 102535G 题解 D 下 CodeForces 1312C 题解 E 三 Code ...
- ai领域职业规划_我如何抛弃我的咨询职业并进入技术领域
ai领域职业规划 by Rahul Iyer 通过拉胡尔·耶尔 我如何抛弃我的咨询职业并进入技术领域 (How I left my consulting career behind and broke ...
- 快速写出高质量IEEE论文的经验总结
导读 对于很多读者而言,写一篇高质量论文一直是一个很头疼问题,这篇文章摘自知乎问答,希望作者们提出的意见能对读者们有所帮助. 作者:知乎用户 https://www.zhihu.com/questio ...
- CSAPP lab2 经典的bomblab二次学习
csapp上的实验一直收到广泛好评,其中第二个实验bomblab则是一个学习C语言及其转化汇编指令的非常好的小项目,前段时间刚刚借鉴了很多教程完成了整个lab的6个小实验(还有一个secret pha ...
最新文章
- UML for Java Programmers之dx实战
- 如何破解root以及grub密码
- Run time setting设置详解
- springboot使用logback日志,部署到tomcat不生效问题解决
- android helloworld程序
- android图文介绍NDK安装及简单jni demon的实现
- python多线程并行编程,Python并行编程(二):基于线程的并行
- boot nk.bin by CEPC
- jvm虚拟机 基于栈_守护基于JVM的应用程序
- bzoj 3881 [Coci2015]Divljak——LCT维护parent树链并
- 【Top 50】中美人工智能高被引学者榜单:孙剑、何恺明、李飞飞进前5
- Win-MASM64汇编语言-visual studio下环境搭建
- Fortinet SIEM 设备被曝存在硬编码 SSH 公钥
- 【广度优先搜索】一个实例+两张动图彻底理解 BFS | 思路+代码详解 | 用 DFS 自动控制我们的小游戏
- treemap底层结构_HashMap面试必问的数据结构相关知识总结
- linux服务器MySQL数据从磁盘拷贝以及恢复
- python安装哪个版本好啊_Python 的版本选择与安装细节
- flex 3 格式化组件
- 针对LSB 信息隐藏的卡方分析算法实现
- RAID1与RAID0的区别