維護乙個字串集合,支援兩種操作:
1.「i x」向集合中插入乙個字串x;
「q x」詢問乙個字串在集合**現了多少次。
共有n個操作,輸入的字串總長度不超過 10^5 ,字串僅包含小寫英文本母。
輸入格式
第一行包含整數n,表示運算元。
接下來n行,每行包含乙個操作指令,指令為「i xix」或「q xqx」中的一種。
資料範圍:
1
<
n<2∗
1041
1<
n<2∗
104
輸出格式
對於每個詢問指令「q x,都要輸出乙個整數作為結果,表示x在集合**現的次數。
每個結果佔一行。
sample input
5i abc
q abc
q ab
i ab
q ab
sample output 110
11、插入過程 (i操作)
對於乙個單詞,從根開始,沿著單詞的各個字母所對應的樹中的節點分支向下走,直到單詞遍歷完,將最後的節點標記一下,表示該單詞已插入trie樹。
2、查詢過程 (q操作)
同樣的,從根開始按照單詞的字母順序向下遍歷trie樹,一旦發現某個節點沒有標記或者單詞遍歷完成而最後的節點未標,則表示該單詞不存在。若最後的節點標記了,表示該單詞存在。
o (m
n∗lo
gn
)o(mn*logn)
o(mn∗l
ogn)
#include
using
namespace std;
const
int n=
1000010
;int son[n][30
],cnt[n]
;int n;
int idx;
char s[n]
;voidin(
char s)
cnt[p]++;
}intqu(
char s)
return cnt[p];}
intmain
(int argc,
char
** ar**)
else
}return0;
}
chenchen題解 最短編輯距離
blablablablablablablablablabla 傳送門 刪除 將字串a中的某個字元刪除,操作次數f i 1 j 1插入 在字串a的某個位置插入某個字元,操作次數f i j 1 1替換 將字串a中的某個字元替換為另乙個字元,需要分兩種情況討論 i.a i b j 操作次數f i 1 j ...
chenchen題解 最短編輯距離
blablablablablablablablablabla 傳送門 狀態表示 dp i j 表示將字串a中前i個字元編輯成字串b中前j個字元所要進行的最少操作 狀態計算,根據操作將集合劃分為3類 刪除 將字串a中的某個字元刪除,操作次數dp i 1 j 1插入 在字串a的某個位置插入某個字元,操作...
chenchen題解 最長不下降子串行
blablablablablablablablablabla 傳送門 dp題狀態表示 dp i 表示到i個字元的最長不下降子串行的長度 狀態轉移 每當當前的子串行為上公升且長度大於maxx時,就更新maxx o n 2 o n 2 o n2 include using namespace std c...