【數據結構】字典樹(Trie樹)算法總結

知識概覽

  • Trie:高效地存儲和查找字符串集合的數據結構
  • 數字、漢字可以用二進制位來存

例題展示

題目鏈接

Trie字符串統計:

https://www.acwing.com/problem/content/837/

代碼

#include <cstdio>const int N = 100010;int son[N][26], cnt[N], idx;  // 下標是0的點,既是根節點,又是空節點
char str[N];void insert(char str[])
{int p = 0;for (int i = 0; str[i]; i++){int u = str[i] - 'a';if (!son[p][u]) son[p][u] = ++idx;p = son[p][u];}cnt[p]++;
}int query(char str[])
{int p = 0;for (int i = 0; str[i]; i++){int u = str[i] - 'a';if (!son[p][u]) return 0;p = son[p][u];}return cnt[p];
}int main()
{int n;scanf("%d", &n);while (n--){char op[2];scanf("%s%s", op, str);if (op[0] == 'I') insert(str);else printf("%d\n", query(str));}return 0;
}

題目鏈接

最大異或對:

https://www.acwing.com/problem/content/145/

題解

對于每個數,先插入,然后再找和這個數異或最大的數,找的方法是找已存儲在字典樹的數,從高位到低位,盡量找和當前數該位不同的數。最終得到的數即為所求。

代碼

#include <cstdio>
#include <algorithm>using namespace std;const int N = 100010, M = 31 * N;int n;
int son[M][2], idx, x;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;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()
{scanf("%d", &n);int res = 0;for (int i = 0; i < n; i++){scanf("%d", &x);insert(x);int t = query(x);res = max(res, x ^ t);}printf("%d\n", res);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206969.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

zxjy003- Spring Cloud后端工程搭建

1、創建 sprigboot 工程 guli-parent groupId &#xff1a; com.atguigu artifactId &#xff1a; guli-parent 2.刪除src目錄 3.配置pom.xml 修改版本為 &#xff1a;2.2.1.RELEASE<artifactId> 節點后面添加 pom類型 全部依賴&#xff0c;復制下面的即可&#xff0c…

素材創作平臺,解決企業素材供給問題

企業對于高質量素材的需求日益增長。無論是為了提升品牌形象&#xff0c;還是為了推動產品銷售&#xff0c;都需要大量的專業設計素材。然而&#xff0c;素材的獲取、設計和定制往往是一項耗時耗力的工作。這時&#xff0c;美攝科技素材創作平臺應運而生&#xff0c;為企業提供…

LeetCode [中等]矩陣置零

73. 矩陣置零 - 力扣&#xff08;LeetCode&#xff09; 暴力解法 用兩個標記數組分別記錄每一行和每一列是否有零出現。 遍歷該數組一次&#xff0c;如果某個元素為 0&#xff0c;那么就將該元素所在的行和列所對應標記數組的位置置為 true。再次遍歷該數組&#xff0c;用標…

從0到1,手把手帶你開發截圖工具ScreenCap------001實現基本的截圖功能

ScreenCap---Version&#xff1a;001 說明 從0到1&#xff0c;手把手帶你開發windows端的截屏軟件ScreenCap 當前版本&#xff1a;ScreenCap---001 支持全屏截圖 支持鼠標拖動截圖區域 支持拖拽截圖 支持保存全屏截圖 支持另存截圖到其他位置 GitHub 倉庫master下的Scr…

人工智能技術在數據治理中的一些思考

隨著企業信息化系統的快速建設&#xff0c;以及物聯網的規模化的應用&#xff0c;企業數據規模快速增長&#xff0c;與之同時企業數據的治理模式仍然以傳統的治理方式為主&#xff0c;ChatGPT等人工智能的崛起正深刻改變著數據治理的思路&#xff0c;如何將AI技術引入企業數據治…

C++新經典模板與泛型編程:用成員函數重載實現std::is_convertible

用成員函數重載實現is_convertible C標準庫中提供的可變參類模板std::is_convertible&#xff0c;這個類模板的主要能力是判斷能否從某個類型隱式地轉換到另一個類型&#xff0c;返回的是一個布爾值true或false。例如&#xff0c;一般的從int轉換成float或從float轉換成int&am…

使用Plex結合cpolar搭建本地私人媒體站并實現遠程訪問

文章目錄 1.前言2. Plex網站搭建2.1 Plex下載和安裝2.2 Plex網頁測試2.3 cpolar的安裝和注冊 3. 本地網頁發布3.1 Cpolar云端設置3.2 Cpolar本地設置 4. 公網訪問測試5. 結語 1.前言 用手機或者平板電腦看視頻&#xff0c;已經算是生活中稀松平常的場景了&#xff0c;特別是各…

劇本殺小程序搭建:打造線上劇本殺新體驗

劇本殺是一款以角色扮演為主的游戲&#xff0c;一度成為了年輕人的最喜愛的社交游戲。在劇本殺市場需求下&#xff0c;劇本殺規模也迅速上升。今年第一季度&#xff0c;劇本殺市場規模環比增長47%&#xff0c;市場整體消費水平逐漸呈上升趨勢。 隨著劇本殺的不斷發展&#xff…

echarts繪制一個環形圖2

其他echarts&#xff1a; echarts繪制一個環形圖 echarts繪制一個柱狀圖&#xff0c;柱狀折線圖 echarts繪制一個餅圖 效果&#xff1a; 組件代碼&#xff1a; <template><div class"wrapper"><div ref"doughnutChart2" id"dough…

ORACLE數據庫實驗總集 實驗六 SQL 語句應用

一、 實驗目的 &#xff08;1&#xff09; 掌握數據的插入&#xff08;INSERT&#xff09;、 修改&#xff08;UPDATE&#xff09; 和刪除&#xff08;DELETE&#xff09; 操作。 &#xff08;2&#xff09; 掌握不同類型的數據查詢&#xff08;SELECT&#xff09; 操作。 二、…

阿里滴滴之后,騰訊視頻也崩了!網友追問:下一個是誰?

繼滴滴“崩了”一夜后&#xff0c;剛過去不到一周時間&#xff0c;互聯網“崩了”連續劇又迎來了續集。 就在剛剛&#xff0c;也是晚間時分&#xff0c;網友曝出騰訊視頻崩了&#xff0c;不能追劇了。接著&#xff0c;騰訊視頻官方便現身回應&#xff0c;坐實了傳聞。 還是同…

JVM虛擬機:如何查看JVM初始和最終的參數?

本文重點 在前面的課程中&#xff0c;我們學習了如何查看當前程序所處于的xx參數&#xff0c;本文再介紹一種如何參看JVM的xx參數&#xff1f; 查看JVM的所有初始化參數 方式一&#xff1a;java -XX:PrintFlagsInitial 方式二&#xff1a;java -XX:PrintFlagsInitial -versio…

【自學篇】Python篇-第一天溫度轉換

1、規則 輸入 華氏度 轉換為 攝氏度 輸入 攝氏度 轉換為 華氏度 轉換公式&#xff1a; 華氏度 攝氏度 * 1.8 32 攝氏度 &#xff08;華氏度32 &#xff09;/1.8 2、python代碼 TempStr input() if TempStr[-1] in [F,f]:print("轉換后的溫度值&#xff1a;{:.2f}C&…

淺談Elasticsearch備份和恢復

Elasticsearch 備份和恢復功能 Elasticsearch 是一個分布式搜索和分析引擎&#xff0c;廣泛應用于各種場景&#xff0c;如日志分析、全文搜索和實時數據處理。在使用 Elasticsearch 時&#xff0c;數據的安全和可用性至關重要。本文將詳細講解 Elasticsearch 的備份和恢復功能…

Uncle Maker: (Time)Stamping Out The Competition in Ethereum

目錄 筆記后續的研究方向摘要引言貢獻攻擊的簡要概述 Uncle Maker: (Time)Stamping Out The Competition in Ethereum CCS 2023 筆記 本文對以太坊 1 的共識機制進行了攻擊&#xff0c;該機制允許礦工獲得比誠實同行更高的挖礦獎勵。這種名為“Uncle Maker”的攻擊操縱區塊時間…

mysql數據庫中int字段長度,即int(1)和int(10)的區別

1.起因 為什么想起來看這個問題&#xff0c;是最近有同事問mysql的init類型的字段長度的問題&#xff0c;他問int(1)和int(10)是什么意思&#xff0c;是字段長度越大&#xff0c;能存儲的數字越大么&#xff1f;咋一問&#xff0c;還有點懵&#xff0c;從慣性思維來看&#xf…

React 中虛擬DOM是什么,為什么需要它?

注意&#xff1a;本節主要講React中的虛擬DOM&#xff0c;但是虛擬DOM并不是React中特有的內容。 1. React 中虛擬 DOM是什么&#xff1f; 虛擬DOM是對真實DOM的描述&#xff0c;虛擬DOM是JS對象&#xff0c;實際上就是 JSX 通過 babel 轉換成 React.createElement()&#xff…

8.3 C++11對Unicode的支持

一、C11對Unicode的支持 在C98中&#xff0c;引入wchar_t對Unicode支持&#xff0c;但是后來由于不同平臺下wchar_t的寬度并不相同(8,16,32位)&#xff0c;導致可移植性受到影響。因此從C11開始引入了char16_t、char32_t以及原有的char&#xff0c;分別存儲utf16&#xff0c;u…

邊緣端部署的典型目標識別網絡

邊緣端&#xff08;Edge&#xff09;部署深度學習目標檢測網絡通常涉及到在資源受限的設備上執行模型推斷。這里有一些邊緣端部署深度學習目標檢測網絡的常見策略和技術&#xff1a; 輕量化模型&#xff1a; 選擇或設計輕量級的深度學習模型&#xff0c;例如MobileNet、Squeez…

來自OpenAI的官方解釋:ChatGPT中的GPTs與Assistants API的區別是什么?有什么差異?

本文原文來自DataLearnerAI的官方網站&#xff1a; 來自OpenAI的官方解釋&#xff1a;ChatGPT中的GPTs與Assistants API的區別是什么&#xff1f;有什么差異&#xff1f; | 數據學習者官方網站(Datalearner)https://www.datalearner.com/blog/1051701996595465 OpenAI發布的產…