#include
//p3808
#define m 1000007
using
namespace std;
int trie[m][26
],cnt,val[m]
,last[m]
,fail[m]
,n;char s[m]
;void
build()
val[u]++;
//給每個模式串結尾打上標記
}void
getfail()
int r=trie[u]
[i],v=fail[u]
;//如果有該兒子
q.push
(r);
//別忘了push
while
(v&&
!trie[v]
[i]) v=fail[v]
;//其fail指標指向其父親的fail指標所指向的點的該兒子,如果沒有,就一直沿著fail指標找下去
fail[r]
=trie[v]
[i];
last[r]
=val[fail[r]
]?fail[r]
:last[fail[r]];
//轉移優化,由於要求模式串的出現個數,因此直接跳到對答案有貢獻的點 }}
}int
solve()
}return ans;
}signed
main()
getfail()
;//建好fail指標
scanf
("%s"
,s);
//讀入文字串
printf
("%d\n"
,solve()
);return0;
}
推薦ac自動機學習部落格:
%%%ac自動機+dp學習部落格:
%%%
序列自動機 板子總結 例題
乙個模式串s s 1e5 n n 1e5 個詢問,每次詢問乙個串t t 1e3 每次詢問t是不是s的子串行 建一下序列自動機,然後每次在自動機上跑一下,類似trie樹,看看是否存在即可 預處理自動機o 26 s 匹配o n t 算是學習了一下序列自動機 建子串行自動機的時候,優先出現的字母先構建 比...
AC自動機 建立nlogn個AC自動機
string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...
AC自動機及字尾自動機
ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...