洛谷 5357 模板 AC自動機(二次加強版)

2021-09-26 03:34:46 字數 1424 閱讀 6336

題目描述

給你乙個文字串 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

輸出 #160

321

說明/提示

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能直接得到想要的值。接著就是最精華的地方,...