<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Trie樹

      Trie

      定義

      字典樹,英文名 trie。顧名思義,就是一個像字典一樣的樹。

      引入

      這棵樹包含了:

      aa
      aba
      ba
      caaa
      cab
      cba
      ac
      

      這幾個單詞。

      如何維護

      定義 son[i][j] 為在 i 號節點,往下邊權為 j 的下一個節點。

      struct trie {
      	int son[100000][26],cnt;
      	int back[100000];
      	void insert(string s) {  // 插入字符串
      		int p=0;
      		for (int i=0;i<s.size();i++) {
      			int c=s[i]-'a';
      			if (!son[p][c]) son[p][c]=++cnt;
      			p=son[p][c];
      		}
      		back[p]++;
      	}
      	bool find(string s) {  // 查找字符串
      		int p=0;
      		for (int i=0;i<s.size();i++) {
      			int c=s[i]-'a';
      			if (!son[p][c]) return 0;
      			p=son[p][c];
      		}
      		return back[p];
      	}
      };
      

      應用

      應用于字符長度不長,但數量極多的情況。

      1. 字符串的前綴數量。

      記錄下沿途的 back 總和,就是答案。

      struct trie {
      	int son[100000][26],cnt;
      	int back[100000];
      	void insert(string s) {  // 插入字符串
      		int p=0;
      		for (int i=0;i<s.size();i++) {
      			int c=s[i]-'a';
      			if (!son[p][c]) son[p][c]=++cnt;  // 如果沒有,就添加結點
      			p=son[p][c];
      		}
      		back[p]++;
      	}
      	bool find(string s) {  // 查找字符串前綴數量
      		int p=0;
      		int ans=0;
      		for (int i=0;i<s.size();i++) {
      			int c=s[i]-'a';
      			if (!son[p][c]) return ans;
      			p=son[p][c];
      			ans=ans+back[p];
      		}
      		return ans;
      	}
      };
      
      1. 01字符串

      如果是關于二進制,便可以直接轉換為二進制。

      例題:

      給定 N 個整數 \(A_1,A_2,A_3,···,A_n\) 中選出兩個進行異或計算,得到的結果最大是多少?

      我們可以先枚舉其中一個數,從高位開始,每一次如果能異或后得到一,便優先選擇,最終取 n 個方案的最大值。

      CODE:

      #include<bits/stdc++.h>
      using namespace std;
      /*!@#$%^&*!@#$%^&*~~優美的分界線~~*&^%$#@!*&^%$#@!*/
      const int N=100005;
      int n,A[N];
      int tot,ch[N*32][2];
      /*!@#$%^&*!@#$%^&*~~優美的分界線~~*&^%$#@!*&^%$#@!*/
      void ins(int x) {
      	int p=0;
      	for(int i=30;i>=0;i--) {
      		int j=(x>>i)&1;
      		if(ch[p][j]==0) ch[p][j]=++tot;
      		p=ch[p][j];
      	}
      }
      int find(int x){
      	int p=0,ans=0;
      	for(int i=30;i>=0;i--) {
      		int j=(x>>i)&1;
      		int k=j?0:1;
      		if(ch[p][k]==0) p=ch[p][j];
      		else p=ch[p][k],ans+=(1<<i);
      	}
      	return ans;
      }
      /*!@#$%^&*!@#$%^&*~~優美的分界線~~*&^%$#@!*&^%$#@!*/
      signed main() {
      	ios::sync_with_stdio(0);
      	cin.tie(0);cout.tie(0);
      	cin>>n;
      	for(int i=1;i<=n;i++) {
      		cin>>A[i];
      		ins(A[i]);
      	}
      	int ans=0;
      	for(int i=1;i<=n;i++)
      		ans=max(ans,find(A[i]));
      	cout<<ans;
      	return 0;
      }
      
      posted @ 2025-10-22 21:30  hjm0703  閱讀(5)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲av成人久久18禁| 亚洲av激情五月性综合| 久久精品国产精品亚洲精品| 久久国产成人av蜜臀| 欧洲美女黑人粗性暴交视频| 亚洲性日韩精品一区二区| 国产精品午夜福利合集| 亚洲国产精品无码av| 国产午夜福利不卡在线观看| 亚洲av永久无码精品漫画| 在线观看免费人成视频色9| 欧美人与性囗牲恔配| 在线日韩日本国产亚洲| 人人妻人人插视频| 日本精品成人一区二区三区视频| 伊人精品成人久久综合97| 日韩一区在线中文字幕| 亚洲精品麻豆一区二区| 高清有码国产一区二区| 亚洲精品美女久久久久9999| 东京热人妻丝袜无码AV一二三区观| 纳雍县| 国产福利姬喷水福利在线观看| 安远县| 国产精品无码成人午夜电影| 日韩AV高清在线看片| 国产性一交一乱一伦一色一情| 午夜福利在线观看入口| 男女性杂交内射女bbwxz| 人妻av中文字幕无码专区| P尤物久久99国产综合精品| 一区二区三区av天堂| 亚洲 制服 丝袜 无码| 高级艳妇交换俱乐部小说| 亚洲 中文 欧美 日韩 在线| 高潮videossex潮喷| 91青青草视频在线观看| 亚洲成在人线AV品善网好看| 无码日韩精品一区二区三区免费| 18禁无遮挡啪啪无码网站| 久久久久无码中|