ACwing 142.字首統計 143.最大異或對
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+10;
int trie[maxn][26],tot = 1,End[maxn];
void insert(char *str) {
int len = strlen(str), p = 1;
for(int i=0;i<len;i++) {
int ch = str[i]-'a';
if(trie[p][ch] == 0) trie[p][ch] = ++tot;
p = trie[p][ch];
}
End[p]++;
}
int search(char *str) {
int len = strlen(str), p = 1, ans = 0;
for(int i=0;i<len;i++) {
p = trie[p][str[i]-'a'];
if(!p) return ans;
ans+=End[p];
}
return ans;
}
int main()
{
int n,m;
cin>>n>>m;
char str[maxn];
for(int i=1;i<=n;i++) {
scanf("%s",str);
insert(str);
}
for(int i=1;i<=m;i++) {
scanf("%s",str);
cout<<search(str)<<endl;
}
}
Trie樹
思路:
有插入和查詢兩個操作函式,字串快速檢索的多叉樹。
從根節點往下遍歷,選擇滿足條件的樹枝方向繼續往下,直至葉子節點或字串結束節點。最大異或對則將整型轉化為32位的二進位制數插入Trie樹,然後根據異或的性質遍歷相反的枝,沒有就往相同的方向,遍歷所有數取max就能得到最大值。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+10;
int trie[maxn*31][2],tot,a[maxn];
void insert(int x) {
int p = 0;
for(int i=30;i>=0;i--) {
int u = x>>i&1;
if(trie[p][u] == 0) trie[p][u] = ++tot;
p = trie[p][u];
}
}
int search(int x) {
int p = 0,res = 0;
for(int i=30;i>=0;i--) {
int u = x>>i&1;
if(trie[p][!u]) {//如果有相反的
p = trie[p][!u];
res = res*2+1;
} else {//沒有繼續走相同的
p = trie[p][u];
res = res*2;
}
}
return res;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) {
cin>>a[i];
insert(a[i]);
}
int ans = 0;
for(int i=0;i<n;i++) {
ans = max(ans,search(a[i]));
}
cout<<ans<<endl;
}
相關文章
- 最大異或對
- 演算法之字首樹——最大異或和演算法
- 複習(二):KMP、Trie、最大異或對、KMP
- 2020/9/30 Acwing-字首和
- P4551 最長異或路徑(樹上字首異或01-trie)
- 雙子串最大異或 題解
- 子陣列的最大異或和問題陣列
- acwing246 區間最大公約數
- 洛谷題單指南-字串-P4735 最大異或和字串
- python系列--計算異或和Python
- 異或
- AcWing 788. 逆序對的數量
- 異或門
- luoguP5369 [PKUSC2018] 最大字首和
- G64【模板】線性基 貪心法 P3812 最大異或和
- 一類區間查詢對應答案具有單調性--維護字首對應端點最大值
- 143. 重排連結串列
- Java中"與"、"或"、"非"、"異或"Java
- 413周賽·第四題 - 3277. 查詢子陣列最大異或值陣列
- 異或雜湊
- 【ctf】異或注入
- 分組異或
- SQL對資料進行按月統計或對資料進行按星期統計的例項程式碼SQL
- 異或線性基
- 位運算-異或(^)
- ?laravel8 中介軟體對處理返回結果或異常進行格式統一處理Laravel
- 遊戲異或加解密遊戲解密
- 異或運算 XOR 教程
- 異或 1 的妙處
- 異或線性基小記
- JavaScript ^ 按位異或運算子JavaScript
- 陣列鍵值統一增加字首陣列
- [藍橋杯] 乘積最大(dfs或dp)
- AcWing 166. 數獨
- 142. 環形連結串列
- Leetcode 142. Linked List Cycle IILeetCode
- Java按位或合併ipv6字首和字尾Java
- IMF:預計2021年全球經濟或創下40年來最大增幅