码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • trie 143. 最大异或对


    在给定的 NN 个整数 A1,A2……ANA1,A2……AN 中选出两个进行 xorxor(异或)运算,得到的结果最大是多少?

    输入格式

    第一行输入一个整数 NN。

    第二行输入 NN 个整数 A1A1~ANAN。

    输出格式

    输出一个整数表示答案。

    数据范围

    1≤N≤1051≤N≤105,
    0≤Ai<2310≤Ai<231

    输入样例:
    1. 3
    2. 1 2 3
    输出样例:
    3

    代码

    1. #include
    2. #include
    3. using namespace std;
    4. const int N=100010,M=31*N;
    5. int n;
    6. int a[N],son[M][2],idx;
    7. void insert(int x)
    8. {
    9. int p=0;
    10. for(int i=30;i>=0;i--)
    11. {
    12. int &s=son[p][x>>i&1];
    13. if(!s) s=++idx;
    14. p=s;
    15. }
    16. }
    17. int search(int x)
    18. {
    19. int p=0,res=0;
    20. for(int i=30;i>=0;i--)
    21. {
    22. int s=x>>i&1;
    23. if(son[p][!s])
    24. {
    25. res+=1<
    26. p=son[p][!s];
    27. }
    28. else p=son[p][s];
    29. }
    30. return res;
    31. }
    32. int main()
    33. {
    34. scanf("%d",&n);
    35. for(int i=0;i
    36. {
    37. scanf("%d",&a[i]);
    38. insert(a[i]);
    39. }
    40. int res=0;
    41. for(int i=0;i
    42. {
    43. res=max(res,search(a[i]));
    44. }
    45. printf("%d\n",res);
    46. return 0;
    47. }

    今天下午暗下决心做三个题目,结果发现做这一个题目就已经非常吃力了。这个题目其实暑假的时候就已经看了题解,早几天看了讲解视频,还是有一些一知半解的。

    主要的思路是建立一个trie树,然后异或运算是不进位加法,意思就是说,一个数字用二进制方法来表示,如果对应数位上的数字不相同,结果就是1,如果两个数字相同,结果就是0。

    我们先把输入的数字使用二进制来进行表示,二进制表示使用算术右移和&运算来进行实现。

    x>>i&1

    我们知道,数位越高,对数字的影响越大,所以我们从最高位开始考虑问题。

    insert函数是用来建立一个trie树的

    search函数是用来寻找当前数字的最大的异或数值

    假设我们现在数位是1,我们需要的数字就是0,我们选择有0的数字去进行异或运算,如果没有0,我们再去考虑其他情况,有点像是有很多数字可以供选择,我们选择一个满足条件的最优解

    res+=1<

    这一行是进制的知识,就是把分散的数字归整成为一个十进制数字,可能会成为最后的答案数值 

     

     

     

  • 相关阅读:
    获取1688店铺详情 API接口(获取卖家昵称、店铺类型、公司信息、店铺标题、店铺主页)
    win11共享打印机无法连接0x0000011b错误怎么解决?
    精简5800三维程序
    你还不知道零基础如何入门网络安全(黑客)吗?
    【附源码】Python计算机毕业设计手游账号交易系统
    Android OpenGL ES 学习(七) – 纹理
    Cookie和Session学习总结
    使用Vue+CSS实现汉堡图标过渡为叉号图标,有点意思
    瑞萨RZ/G2L平台 初起动(SD卡启动)
    Netty实战(三)
  • 原文地址:https://blog.csdn.net/L3102250566/article/details/133364632
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号