当前位置: 首页 > news >正文

题解:AcWing 143 最大异或对

【题目来源】

AcWing:143. 最大异或对 - AcWing题库

【题目描述】

在给定的\(N\)个整数 \(A_1,A_2,...,A_N\) 中选出两个进行 \(xor\) (异或)运算,得到的结果最大是多少?

【输入】

第一行输入一个整数\(N\)

第二行输入\(N\)个整数\(A_1\sim A_N\)

【输出】

输出一个整数表示答案

【输入样例】

3
1 2 3

【输出样例】

3

【解题思路】

image

【算法标签】

《AcWing 143 最大异或对》 #Trie# #字典树# #贪心#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 100010, M = 3000000;  // N: 数字个数上限, M: Trie节点数上限
int n;                              // 实际数字个数
int son[M][2], idx;                 // son: Trie树结构, idx: 当前可用节点编号
int a[N];                           // 存储输入数字的数组// 向Trie树中插入一个数字(按二进制位从高到低)
void insert(int x)
{int p = 0;  // 从根节点开始for (int i = 30; i >= 0; i--)   // 处理31位(包括符号位){int &s = son[p][x >> i & 1];  // 获取当前二进制位的子节点if (!s) s = ++idx;  // 如果子节点不存在则创建p = s;          // 移动到子节点}
}// 查询与x异或结果最大的值
int query(int x)
{int res = 0, p = 0;  // res: 存储结果, p: 当前节点for (int i = 30; i >= 0; i--) {int s = x >> i & 1;  // 获取x的第i位if (son[p][!s])       // 优先选择相反的位(使异或结果最大){res += 1 << i;    // 该位异或结果为1,贡献2^ip = son[p][!s];   // 移动到相反位的子节点}else                  // 没有相反的位则选择相同位{res += 0 << i;    // 该位异或结果为0(可省略)p = son[p][s];    // 移动到相同位的子节点}}return res;
}int main()
{cin >> n;  // 输入数字个数for (int i = 0; i < n; i++) {cin >> a[i];  // 输入数字insert(a[i]); // 插入Trie树}int res = 0;  // 存储最大异或结果for (int i = 0; i < n; i++) res = max(res, query(a[i]));  // 查询每个数字能得到的最大异或值cout << res;  // 输出最终结果return 0;
}

【运行结果】

3
1 2 3
3
http://www.jsqmd.com/news/399276/

相关文章:

  • 题解:AcWing 829 模拟队列
  • Seedance 深度解析:字节跳动 AI 视频生成模型从 1.0 到 2.0 的全面进化
  • 题解:AcWing 831 KMP字符串
  • CVE-2016-6802
  • 探秘DS18B20:单总线数字温度传感器的原理与应用
  • 题解:AcWing 154 滑动窗口
  • 与相似的灵魂为邻——一位文化从业者的圈层选择
  • 题解:AcWing 3302 表达式求值
  • CST仿真:探索涡旋与聚焦的奇妙世界
  • 678678678
  • SaaS架构下AI原生应用的最佳实践与案例分析
  • 题解:P15369 『ICerOI Round 1』并非图论
  • 题解:AcWing 828 模拟栈
  • 深度解析AI原生应用领域的事件驱动机制
  • 大数据ETL处理:GPU加速方案设计与性能优化
  • C语言中的数据类型和变量
  • 题解:AcWing 827 双链表
  • 题解:AcWing 826 单链表
  • 题解:AcWing 802 区间和
  • js获取html相邻标签
  • 题解:AcWing 803 区间合并
  • 计算机毕业设计 | SpringBoot+vue科研项目验收管理系统(附源码+论文)
  • 计算机毕业设计 | SpringBoot+vue毕业论文管理系统 高校文档项目答辩平台(附源码+论文)
  • 计算机毕业设计 | SpringBoot+vue中山社区医疗综合服务平台(附源码+论文)
  • Flink 任务失败恢复机制Restart Strategy 和 Failover Strategy 怎么配才“又稳又不炸”
  • Tauri 前端配置把任何前端框架“正确地”接进 Tauri(含 Vite/Next/Nuxt/Qwik/SvelteKit/Leptos/Trunk)
  • 计算机毕业设计 | SpringBoot+vue毕业设计答辩平台 校园成绩管理系统(附源码+论文)
  • Tauri 项目结构前端壳 + Rust 内核,怎么协作、怎么构建、怎么扩展
  • 抖音评论自动采集|拓客|免登录
  • 当Claude Code负责人说amp;quot;编程已解决amp;quot;,测试工程师该慌吗?