给出 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+贪心相关推荐

  1. CodeForces - 1285D Dr. Evil Underscores(记忆化搜索+字典树)

    题目链接:点击查看 题目大意:给出n个数字,现在要求出一个X,使得X与n个数字单独异或之后的最大值,输出这个最大值的最小值 题目分析:最大值的最小值,差点就以为是字典树+二分了,因为没有单调性然后就无 ...

  2. Dr. Evil Underscores(异或最大值最小)

    Today, as a friendship gift, Bakry gave Badawy nn integers a1,a2,-,ana1,a2,-,an and challenged him t ...

  3. Dr. Evil Underscores

    Today, as a friendship gift, Bakry gave Badawy nnn integers a1,a2,-,ana_1,a_2,-,a_na1​,a2​,-,an​ and ...

  4. Evil Coordinate(思维+贪心)

    题目传送门 唉,这道题出的妙啊,本蒟蒻想破头皮也想不出来. 这道题感觉和我之前在cf做的一道题的思考方式(枚举方式)很类似 链接如下 类似题目传送门 怎么做呢? 当时的思路实际上就是想绕过这个地雷.但 ...

  5. 如何通过 HttpWebRequest 上传文件?

    咨询区 dr. evil 我不希望通过 WebDAV 文件夹的方式上传文件,我想通过相关的 HttpWebRequest 类,类库或者代码片段来帮我模拟浏览器行为来上传文件,请问是否有好的解决方案? ...

  6. 集训队每周一赛2020-03-13(构造+找规律+字符串+并查集)

    第三次周赛 A 飞 Gym 102416C 题解 B 流 CodeForces 1316B 题解 C 直 Gym 102535G 题解 D 下 CodeForces 1312C 题解 E 三 Code ...

  7. ai领域职业规划_我如何抛弃我的咨询职业并进入技术领域

    ai领域职业规划 by Rahul Iyer 通过拉胡尔·耶尔 我如何抛弃我的咨询职业并进入技术领域 (How I left my consulting career behind and broke ...

  8. 快速写出高质量IEEE论文的经验总结

    导读 对于很多读者而言,写一篇高质量论文一直是一个很头疼问题,这篇文章摘自知乎问答,希望作者们提出的意见能对读者们有所帮助. 作者:知乎用户 https://www.zhihu.com/questio ...

  9. CSAPP lab2 经典的bomblab二次学习

    csapp上的实验一直收到广泛好评,其中第二个实验bomblab则是一个学习C语言及其转化汇编指令的非常好的小项目,前段时间刚刚借鉴了很多教程完成了整个lab的6个小实验(还有一个secret pha ...

最新文章

  1. UML for Java Programmers之dx实战
  2. 如何破解root以及grub密码
  3. Run time setting设置详解
  4. springboot使用logback日志,部署到tomcat不生效问题解决
  5. android helloworld程序
  6. android图文介绍NDK安装及简单jni demon的实现
  7. python多线程并行编程,Python并行编程(二):基于线程的并行
  8. boot nk.bin by CEPC
  9. jvm虚拟机 基于栈_守护基于JVM的应用程序
  10. bzoj 3881 [Coci2015]Divljak——LCT维护parent树链并
  11. 【Top 50】中美人工智能高被引学者榜单:孙剑、何恺明、李飞飞进前5
  12. Win-MASM64汇编语言-visual studio下环境搭建
  13. Fortinet SIEM 设备被曝存在硬编码 SSH 公钥
  14. 【广度优先搜索】一个实例+两张动图彻底理解 BFS | 思路+代码详解 | 用 DFS 自动控制我们的小游戏
  15. treemap底层结构_HashMap面试必问的数据结构相关知识总结
  16. linux服务器MySQL数据从磁盘拷贝以及恢复
  17. python安装哪个版本好啊_Python 的版本选择与安装细节
  18. flex 3 格式化组件
  19. 针对LSB 信息隐藏的卡方分析算法实现
  20. RAID1与RAID0的区别

热门文章

  1. 《网络安全应急响应技术实战指南》知识点总结(第1~2章 网络安全应急响应概述和基础技能)
  2. H5中attr属性的使用,伪元素,阴影
  3. 二级计算机高频函数,计算机二级excel函数公式高频考点详解
  4. KKT条件,百度还是清晰的,主要个人的逻辑比较严密,感觉讲的意识到位但是逻辑不通,这里把百度到的理顺
  5. 安装打印机0X0000007e报错
  6. 前端复制内容到粘贴板实现方法
  7. 关于 OGRE 与 OSG 的简略比较(转自www.MyException.Cn )
  8. 使用python pynput完全模拟鼠标操作
  9. Java 双重 for 循环
  10. ORACLE监控索引使用