題目描述給你乙個文字串 s 和 n 個模式串 t
1..n
t_t1
..n
,請你分別求出每個模式串 t
it_i
ti 在 s **現的次數。
輸入格式
第一行包含乙個正整數 n 表示模式串的個數。
接下來 n 行,第 i 行包含乙個由小寫英文本母構成的字串 t
it_i
ti。
最後一行包含乙個由小寫英文本母構成的字串 s。
輸出格式
輸出包含 n 行,其中第 iii 行包含乙個非負整數表示 t
it_i
ti 在 s **現的次數。
輸入輸出樣例輸入 #15a
bbaa
abaa
abaaa
abaaabaa
輸出 #160321
說明/提示1 ≤n
≤2×1
05
1≤n≤2×10^5
1≤n≤2×
105,t
1..n
t_t1
..n
的長度總和不超過 2×1
05
2×10^5
2×10
5,s 的長度不超過 2×1
06
2×10^6
2×106。
#include#define maxn 2000001
using namespace std;
char s[maxn],t[maxn];
int n,cnt,vis[200051],ans,in[maxn],map[maxn];
struct kkk
}trie[maxn];
queueq;
void insert(char* s,int num)
if(!trie[u].flag)trie[u].flag=num;
map[num]=trie[u].flag;
}void getfail()
trie[v].fail=trie[fail].son[i]; in[trie[v].fail]++;
q.push(v);}}
}void topu()
}void query(char* s)
int main()getfail();scanf("%s",t);
query(t);topu();
for(int i=1;i<=n;i++)printf("%d\n",vis[map[i]]);
}
洛谷P5357 AC自動機模板題
p5357 對應輸出n個模式串在文字串 現的次數 ac自動機?坑點 可能出現重複模板串,所以標記結尾時做相應的修改即可 這裡的寫法是把fail樹對應的圖建出來了,其實不需要建也可以求出 這不重要 void getans void include using namespace std typedef...
洛谷P5357 AC自動機 二次加強版
題目大意 給你n個模式串t it i ti 乙個匹配串s.問你每個模式串出現過多少次.n 2 e5,ti 2e5 s 1e6 n leq 2e5 sum t i leq 2e5 s leq 1e6 n 2e5,ti 2 e5,s 1 e6題目思路 模板 優化。其實我們可以發現ac自動機在查詢的時候,...
P5357 模板 AC自動機(二次加強版)
題目大意 給n個模式串和乙個主串,分別輸出每個模式串在主串 現過幾次 題目思路 ac自動機模板題,ac自動機就是先建乙個字典樹,然後建fail指標,建fail的時候如果是模式串中給的字元,就建fail,否則就繼承之前的fail情況,這是為了以後不用跳fail能直接得到想要的值。接著就是最精華的地方,...