p5357
對應輸出n個模式串在文字串**現的次數
ac自動機?
坑點:可能出現重複模板串,所以標記結尾時做相應的修改即可
這裡的寫法是把fail樹對應的圖建出來了,
其實不需要建也可以求出(這不重要)
void
getans
(void
)}
#include
using namespace std;
typedef
long
long ll;
typedef pair<
int,
int>pii;
typedef pairpll;
const
int maxn=
2e6+5;
const
int mod=
1e9+7;
const
int oo=
1e9+8;
char s[maxn+5]
;int fail[maxn+5]
,trie[maxn+5]
[26],tot=
0,ans[maxn+5]
,dp[maxn+5]
;int n;
queue<
int>q;
vector<
int>vec[maxn+5]
,ed[maxn+5]
;void
dfs(
int x)
for(
int i=
0;i.size()
;i++
) ans[ed[x]
[i]]
=dp[x];}
struct ac_auto
ed[p]
.push_back
(id);}
void
build_fail()
else trie[f]
[i]=trie[fail[f]
][i];}
}}void
check
(char
*s)dfs(0
);}}ac;
intmain()
scanf
("%s"
,s);
ac.build_fail()
; ac.
check
(s);
for(
int i=
1;i<=n;i++
)}
洛谷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自動機在查詢的時候,...
AC自動機模板 洛谷3796
ac自動機的第三個模板 其實,個人覺得,目前我寫的這三個不同的模板完全是可以合併在一起求解的。只是,在這兩個無關聯的oj上,同乙個ac自動機都可以完成的問題被拆成了三道題而已。因此,只需要略加修改即可解決這道題。具體題目請上洛谷檢視 include include include include i...
洛谷 5357 模板 AC自動機(二次加強版)
題目描述 給你乙個文字串 s 和 n 個模式串 t 1.n t t1 n 請你分別求出每個模式串 t it i ti 在 s 現的次數。輸入格式 第一行包含乙個正整數 n 表示模式串的個數。接下來 n 行,第 i 行包含乙個由小寫英文本母構成的字串 t it i ti 最後一行包含乙個由小寫英文本母...