最大异或对(trie树)

题目描述: 


思路: 

1、首先此题我们要知道异或的规则,这里不赘述了,可以百度
2、如果利用trie树去找到一个数字与其异或能得到最大值
比如二进制数:1010.....是一个很大的数
我们想要异或得到的值更大,就需要让异或的值,最好去找与其相反的数
比如 1010.....最高位是1我当然找到0与其异或是比较好的,况且还在最高位如果异或
是1的话就很好,假如没找到0的话,那只能和1将就一下。
3、为了避免边界情况,少写一个判断,所以我们先插入后查找,不会影响最后结果的 
因为本身异或是0

图解:

如图:

第一个数是5,我们先进行插入操作,101,插入进去

第二个数是6,依然先插入后找最大异或对象,此树中目前只有5和6本身,根据上面规则,

6的二进制是110,最高位是1我们想找一个0与其匹配最好,但是5的二进制是101,第一位是1,加上trie树中没有最高位0与其匹配所以只能勉强,和1匹配后是1,再依次按照规则,继续,6异或5是3(011-->二进制数)

第三个数是3(011-->二进制),依旧先插入,最高位是0,所以我们要去找1与其匹配,trie树中有1,所以继续,第二位是1,最好情况是找到0与其匹配, 同样0我们也找到了,继续第三位是1,我们还想找0,但是trie树中好像没有0与其匹配,我们只好将就一下找1吧~,所以3与其匹配的二进制数是101-->5,3^5--->110(6)

第四个数是4(100-->二进制),先插入,最高位是1,我们可以找0与其匹配的,我们可以找到0,此0来源于3的二进制011中的最高位0,第二位是0我们就要找1与其匹配,1也同样有,继续往下走,第三位也是0,同样要找1,还是有,所以4^3--->7(111)

第五个数是7(111-->二进制),先插入,最高位是 1,我们还是找到0与其匹配,然后按照规则走下去,7^3--->4(100)

通过上述图解和例子,我们可以看出5 6 3 4 7这组数的最大异或对是4 和 3  -----> 7(111)


AC代码:

#include<iostream>using namespace std;//解释一下M为啥是31*N,因为根据数据范围,一个数小于2^31-->一个数31位,N个数
//就是31*N
const int N  = 1e5+10, M = 31*N;
int a[N];
int son[M][2];
int idx;void insert(int x)
{int p = 0;for(int i=30;i>=0;i--){//右移动大最大的位置,看下当前位置是1还是0int u = x >> i & 1;//如果没有创建一个节点存一下if(!son[p][u]) son[p][u] = ++idx;p = son[p][u];//指向下一个节点}
}int query(int x)
{int p = 0;int res = 0;for(int i=30;i>=0;i--){int u = x >> i & 1;if(son[p][!u]){p = son[p][!u];//这里等价于十进制中的 n = n * 10 + x;//八进制的话就是n = n * 8 + x;res = res * 2 + !u; }else{p = son[p][u];res = res * 2 + u;}}
}int main()
{int n;scanf("%d", &n);for(int i=0;i<n;i++) scanf("%d",&a[i]);int res = 0;for(int i=0;i<n;i++){insert(a[i]); //插入int t = query(a[i]); //查找最合适的那个他res = max(res,a[i]^t); //找出最大值}printf("%d",res);return 0;
}

如果有错误,欢迎大家指正~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS(二十)——管理应用拥有的状态之LocalStorage(页面级UI状态存储)

LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内&#xff0c;在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器&#xff1a;LocalStorageProp和LocalS…

流畅的Python(十九)-动态属性和特性

一、核心要义 在Python中,数据的属性和处理数据的方法,统称属性。方法&#xff0c;只是可调用的属性。除了这两者之外,我们还可以创建特性(property),在不改变类接口的前提下,使用存取方法(即读值方法和设值方法)修改数据属性。 二、代码示例 0、相关知识点 #!/usr/bin/env…

微服务技术栈之rabbitMQ高级(二)

我们该如何确保MQ消息的可靠性&#xff1f; 如果真的发送失败&#xff0c;有没有其它的兜底方案&#xff1f; 这些问题&#xff0c;在这一次的学习中都会找到答案。 生产者的可靠性 首先&#xff0c;我们一起分析一下消息丢失的可能性有哪些。 消息从发送者发送消息&#…

StarRocks实战——云览科技存算分离实践

目录 背景 一、平台现状&痛点 1.1 使用组件多&#xff0c;维护成本高 1.2 链路冗长&#xff0c;数据时效性难以保证 1.3 服务稳定性不足 二、StarRocks 存算分离调研 2.1 性能对比 2.2 易用性 2.3 存储成本 三、StarRocks 存算分离实践 3.1 查询优化 3.1.1 物化…

Linux网络编程: 以太网帧Frame/ARP/RARP详解

一、TCP/IP五层模型 物理层&#xff08;Physical Layer&#xff09;&#xff1a;物理层是最底层&#xff0c;负责传输比特流&#xff08;bitstream&#xff09;以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流&#xff0c;例如通过电缆、光纤或无线传输等。…

【论文阅读】Diffused Heads: Diffusion Models Beat GANs on Talking-Face Generation

Diffused Heads: 扩散模型在说话人脸生成方面击败GANs paper&#xff1a;[2301.03396] Diffused Heads: Diffusion Models Beat GANs on Talking-Face Generation (arxiv.org) code&#xff1a;MStypulkowski/diffused-heads: Official repository for Diffused Heads: Diffu…

R:简易的Circos图

library(grid) library(circlize) library(RColorBrewer) library(ComplexHeatmap) setwd("C:/Users/fordata/Downloads/Circos") # 创建颜色调色板 coul <- colorRampPalette(brewer.pal(9, "Set3"))(12) # 读取基因组数据 genome <- read.table(ci…

贪心算法(两个实例)

例一&#xff1a;调度问题 问题&#xff1a;由n项任务&#xff0c;每项任务的加工时间已知&#xff0c;从零时刻开始陆续加入一台机器上去加工&#xff0c;每个任务完成的时间是从0时刻到任务加工截至的时间。 求总完成时间&#xff08;所有任务完成时间最短计划方案&#xf…

情感分析技术调研:传统方法到深度学习的全景观

目录 基于规则的方法 字典 基于机器学习的方法 贝叶斯分类 支持向量机 基于深度学习的方法 Transformer系列&#xff0c;Bert家族--以Albert举例 自监督学习 迁移学习和领域适应 对抗训练 前言 本文讨论的是截止到本文发出时间&#xff08;2024年&#xff09;为止&am…

PostMan测试文件上传

后端代码 package com.example.backend.controller;import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import com.example.backend.common.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import org…

Educational Codeforces Round 163 (Rated for Div. 2)题解

A. Special Characters&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;给定一个正整数n&#xff0c;需要输出一个字符串s&#xff0c;s中需要有n个满足要求的字符&#xff0c;对于字符的要求&#xff1a;对于该字符&#xff0c;它的左右有且仅有一个字…

React Router 参数使用详解

React Router 参数使用详解 React Router 是 React 中用于处理路由的常用库&#xff0c;它提供了丰富的功能来管理应用程序的导航和路由状态。在 React Router 中&#xff0c;我们经常需要使用不同类型的参数来处理路由信息&#xff0c;包括 params 参数、search 参数和 state…

数据血缘实现原理

市面上其实针对数据血缘的产品有很多,像阿里DataWorks的数据地图、字节的DataLeap以及非常火的开源产品Apache Atlas都是非常好用工具产品。但是本质上是想通过这篇文章,让小伙伴们在使用这些产品的时候多去思考这些产品背后的实现原理。 1、前言 大数据时代,数据的来源极…

Python Web开发记录 Day9:Django part3 用户管理

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、数据库准备2、用户列表3、新建用户4、编辑用…

科研学习|论文解读——美国政治经济中的权力:网络分析(JASIST, 2019)

论文原题目 Power in the U.S. political economy: A network analysis 摘要 美国政治经济的许多特征产生于大型政治和经济机构之间的互动&#xff0c;然而我们对它们的互动性质和这些机构之间的权力分配知之甚少。在本文中&#xff0c;对总部设在美国的组织的网络进行了详细的…

突破编程_C++_面试(STL 编程 map 与 multimap)

面试题 1 &#xff1a;解释一下 std::map 和 std::multimap 之间的主要区别是什么&#xff1f; std::map 和 std::multimap 都是 C 标准模板库&#xff08;STL&#xff09;中的关联容器&#xff0c;它们提供了键值对的存储和快速查找功能。然而&#xff0c;它们之间存在着一些…

学习shell脚本

文章目录 什么是shell脚本为什么要学习shell脚本第一个脚本编写与执行 简单的shell脚本练习简单案例脚本的执行方式差异(source、sh script、./script) 如何使用shell脚本的判断式利用test命令的测试功能利用判断符号[ ]shell脚本的默认变量($0、$1...) shell脚本的条件判断式利…

C语言每日一题—判断是否为魔方矩阵

魔方矩阵 在魔方阵中&#xff0c;所有的行、列和对角线都拥有相同的和。例如&#xff1a;17 24 1 8 15 23 5 7 14 16 4 9 24 6 13 20 22 和 3 5 710 12 19 21 3 8 1 611 18 25 2 9 写一个程序读入一个二维整型数组并…

【Unity知识点详解】Button点击事件拓展,单击、双击、长按实现

Button拓展 今天来聊一下关于Button的事件拓展&#xff0c;这里只是拿Button来举例&#xff0c;Unity中其他的UI组件如Toggle、Slider等都也适用。 我们知道在Button中我们可以通过onClick的方式来添加点击事件&#xff0c;但在游戏开发过程中我们往往对Button有着更多的功能需…

2.3 物理层设备

2.3 物理层设备 &#xff08;一&#xff09;中继器 产生原因 由于存在损耗&#xff0c;在线路上传输的信号功率会逐渐衰减&#xff0c;衰减到一定程度时将造成信号失真&#xff0c;因此会导致接收错误。 中继器的功能 对信号进行再生和还原&#xff0c;对衰减的信号进行放大…