【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
英文地址,請注明出處:http://en.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;甚至實現了四頭蛇的"量子糾纏式…