【AcWing 143题解】最大异或对

AcWing 143. 最大异或对
【题目描述】
在这里插入图片描述
在查看解析之前,先给自己一点时间思考哦!
天津之眼
【题解】
本题要求给定一个整数序列,找出其中任意两个数进行异或运算后,结果的最大值是多少。由于数据规模较大,我们不能简单地通过两层循环直接遍历所有组合,这样的时间复杂度会达到O(n2)O(n^2)O(n2),超出了时间限制。
我们可以利用Trie树来高效解决这个问题。通过使用前缀树,我们能够将每个整数拆分成二进制形式,按照其二进制位插入树中,然后在查询时可以通过比较来找到最大可能的异或值。

关键点:
异或性质:我们要最大化的是两个数的异或值,而异或的性质决定了异或值越大,二者的对应位越不相同。因此,在查询时,我们会尽量选择不同的位进行匹配。
Trie 树结构:每个节点代表一个二进制位(0 或 1)。从根节点开始,每个数按位插入,如果当前数的某一位是 1,那么它就沿着该位的路径插入树中。
查询最大异或值:当我们要查询一个数的最大异或值时,从当前数的二进制表示的每一位开始,尽量沿着与当前位不同的路径走。

实现步骤:
将每个数的二进制位逐位插入到 Trie 树中。
在插入每个数的同时,查询当前数和 Trie 树中已有数的最大异或值,并更新最大异或值。
【参考代码】

#include <iostream>
using namespace std;// 最大节点数和最大Trie树的容量
const int N = 1e5 + 10, M = 31 * N;  
// son[i][0/1] 表示节点 i 的左/右子节点,a 存储输入的数,idx 用来给每个节点编号
int son[M][2], a[N], idx;  // 插入一个数到 Trie 树
void insert(int x) {int p = 0;// 从高位到低位插入数的二进制位for(int i = 30; i >= 0; i--) {int u = x >> i & 1;  // 获取当前二进制位if(!son[p][u])  // 如果该路径没有节点,则创建新节点son[p][u] = ++idx;p = son[p][u];  // 移动到下一个节点}
}// 查询当前数与树中已有数的最大异或值
int query(int x) {int p = 0, res = 0;  // p 为当前节点,res 为当前异或结果// 从高位到低位查询最大异或值for(int i = 30; i >= 0; i--) {int u = x >> i & 1;  // 获取当前二进制位// 尝试选择与当前位不同的路径,以得到更大的异或值if(son[p][!u]) {p = son[p][!u];res = res * 2 + !u;} else {p = son[p][u];res = res * 2 + u;}}return res; 
}int main() {int n;cin >> n;  for(int i = 0; i < n; i++)cin >> a[i];  int res = 0;  // 用来存储最大异或值for(int i = 0; i < n; i++) {insert(a[i]);  // 将当前数插入到 Trie 树int t = query(a[i]);  // 查询当前数的最大异或值res = max(res, a[i] ^ t);  // 更新最大异或值}cout << res << endl;  return 0;
}

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

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

相关文章

SQLAlchemy 2.0简单使用

记录一下SQLAlchemy 2.0连接mysql数据库的方法及简单使用 环境及依赖 Python:3.8 mysql:8.3 Flask:3.0.3 SQLAlchemy:2.0.37 PyMySQL:1.1.1使用步骤 1、创建引擎&#xff0c;链接到mysql engine create_engine(mysqlpymysql://{username}:{password}{ip}:3306/{database_name}…

如何创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT)

要创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT),请按照以下步骤操作: 一、生成具有 repo 权限的 PAT 登录 GitHub 访问 GitHub 官网,使用你的账户登录。 进入开发者设置 点击右上角头像,选择 Settings(设置) → 左侧菜单中选择 Developer settings(开发者设…

【AI时代速通QT】第五节:Qt Creator如何引入第三方库,以OpenCV为例

目录 引言 一、第一步&#xff1a;万事开头难 - 准备工作 1.1 获取并“安装”OpenCV 1.2 创建一个新的Qt项目 1.3 建立专业的项目目录结构 二、第二步&#xff1a;核心操作 - 配置.pro文件 2.1 方式一&#xff1a;图形化向导&#xff08;适合初次体验&#xff09; 2.2 …

使用Clion开发STM32(Dap调试)

使用Clion开发STM32环境配置ST-Link无法下载OpenOCDST-Link调试Dap-Link调试Debug配置查看寄存器值之前写了一篇文章关于如何用VSCode配合EIDE插件开发STM32 最近研究了如何使用Clion开发STM32 环境配置 使用Clion开发STM32需要用到4个工具&#xff1a;Clion、STM32CubeMX、…

人工智能-python-OpenCV 中 `release()` 和 `destroy()` 的区别

文章目录OpenCV 中 release() 和 destroy() 的区别1. release()常见使用场景&#xff1a;代码示例&#xff1a;作用&#xff1a;2. destroy()常见使用场景&#xff1a;代码示例&#xff1a;作用&#xff1a;3. 总结&#xff1a;4. 何时使用小结&#xff1a;OpenCV 中 release()…

[RPA] 日期时间练习案例

案例1根据日期拆分表格根据表格中不同日期&#xff0c;创建多个对应日期名称的Sheet页(名称格式为"yyyy-mm-dd")&#xff0c;并将同一日期的订单拷贝至对应Sheet页日期时间练习题1.xlsx流程搭建&#xff1a;实现效果&#xff1a;

2025.7.27文献阅读-基于深度神经网络的半变异函数在高程数据普通克里金插值中的应用

2025.7.27周报一、文献阅读题目信息摘要创新点实验一、半变异函数拟合二、普通克里金插值三、结果对比分析四、实验结果结论不足以及展望一、文献阅读 题目信息 题目&#xff1a; Application of a semivariogram based on a deep neural network to Ordinary Kriging interp…

用unity开发教学辅助软件---幼儿绘本英语拼读

记录完整项目的制作&#xff0c;借鉴了大佬被代码折磨的狗子 “unity创建《找不同》游戏 图片编辑器”一文。 &#xff08;建议通过目录阅读本文哦~&#xff09; 项目演示&#xff1a; 幼儿英语教辅幼儿英语绘本教学游戏整体架构 游戏开发中设计的整体框架 游戏的总体功能框架…

《Java 程序设计》第 5 章 - 数组详解

引言在 Java 编程中&#xff0c;数组是一种基础且重要的数据结构&#xff0c;它允许我们将多个相同类型的元素存储在一个连续的内存空间中&#xff0c;通过索引快速访问。掌握数组的使用是学习 Java 集合框架、算法等高级知识的基础。本章将从数组的创建、使用开始&#xff0c;…

基于Spring Boot的可盈保险合同管理系统的设计与实现(源码+论文)

一、相关技术 技术/工具描述SSM框架在JavaWeb开发中&#xff0c;SSM框架&#xff08;Spring Spring MVC MyBatis&#xff09;是流行的选择。它既没有SSH框架的臃肿&#xff0c;也没有SpringMVC的简化&#xff0c;属于中间级别&#xff0c;更灵活且易于编写和理解。MyBatis框…

​​XSLT:XML转换的“魔法棒”​

大家好&#xff01;今天我们来聊聊 ​​XSLT​​&#xff08;Extensible Stylesheet Language Transformations&#xff09;&#xff0c;一种用于转换和呈现XML文档的神奇工具。如果你曾需要将一堆枯燥的XML数据变成精美的HTML网页、PDF报告&#xff0c;或其他XML格式&#xff…

面试实战,问题十,如何保证系统在超过设计访问量时仍能正常运行,怎么回答

如何保证系统在超过设计访问量时仍能正常运行 在Java面试中&#xff0c;当被问及如何保证系统在访问量激增&#xff08;例如从100万用户增长到200万&#xff09;时仍能稳定运行&#xff0c;这是一个考察高并发、可扩展性和容错能力的关键问题。核心在于通过架构设计、性能优化和…

DMDSC安装部署教程

一、环境准备 虚拟机准备&#xff0c;添加共享磁盘 &#xff08;1&#xff09;共享存储规划 裸设备名 容量 用途 /dev/sdb 10 G /dev/asmdata0&#xff08;数据磁盘&#xff09; /dev/sdc 5 G /dev/asmdcr&#xff08;DCR 磁盘&#xff09; /dev/sdd 5 G /dev/asm…

半导体 CIM(计算机集成制造)系统

半导体CIM&#xff08;Computer Integrated Manufacturing&#xff0c;计算机集成制造&#xff09;系统是半导体制造的“神经中枢”&#xff0c;通过整合硬件设备、软件系统和数据流转&#xff0c;实现从订单到成品的全流程自动化、信息化和智能化管理。其工作流程高度贴合半导…

AI是否会终结IT职业?深度剖析IT行业的“涌现”与重构

引言&#xff1a;一场不可回避的技术审判在ChatGPT、Copilot、Claude、Sora 等AI技术密集爆发的今天&#xff0c;IT行业首当其冲地感受到这股浪潮带来的“智力替代压力”。尤其是以开发、测试、运维、分析为主的岗位&#xff0c;逐渐被AI所“渗透”。于是&#xff0c;问题摆在每…

mid360连接机载电脑,远程桌面连接不上的情况

为什么会出现这种情况呢&#xff0c;一开始我以为是雷达使用的网线&#xff0c;使用的是和网络同样的口&#xff0c;是因为机载电脑带宽不足&#xff0c;所以导致的&#xff0c;但是后面发现不管是哪一个机载电脑都会断开连接&#xff0c;后面了解得知&#xff0c;并不是连接的…

目标检测系列(六)labelstudio实现自动化标注

一、启用图片文件服务用Nginx启用图片服务&#xff0c;配置好映射路径。新建图片文件夹&#xff0c;将文件夹下的图片路径存储到txt文件中访问地址&#xff08;文件夹&#xff09;&#xff1a;http://112.12.19.122:8081/urls/ml-backend-test/进入labelstudio将txt文件路径填入…

从零开始大模型之编码注意力机制

从零开始大模型之编码注意力机制1 长序列建模中的问题2 使用注意力机制捕捉数据依赖关系3 自注意力机制4 实现带可训练权重的自注意力机制5 利用因果注意力隐藏未来词汇6 将单头注意力扩展到多头注意力7 Pytorch附录7.1 torch.nn.Linear多头掩码可训练权重的注意力机制。为什么…

小架构step系列26:Spring提供的validator

1 概述对于Web服务&#xff0c;需要对请求的参数进行校验&#xff0c;可以对不合法的参数进行提示&#xff0c;提高用户体验。也可以防止有人恶意用一些非法的参数对网站造成破坏。如果是对每个参数都写一段代码来判断值是否合法&#xff0c;那校验的代码就很多&#xff0c;也很…

0编程基础:用TRAE写出了会蹦跳躲避散发炫光的贪吃蛇小游戏

在某个深夜的代码深渊里&#xff0c;一个从未写过print("Hello World")的小白开发者&#xff0c;竟用自然语言指令让贪吃蛇跳起了"光棱华尔兹"——蛇身折射出彩虹轨迹&#xff0c;食物像星舰般自动规避追击&#xff0c;甚至实现了四头蛇的"量子纠缠式…