題目大意:
給定$n$個模式串$p(\sum|p_i|\le10^6)$和乙個$t(|t|\le10^6)$,求在$t$中被匹配的$p$的個數。
思路:ac自動機模板題,注意$t$中乙個字元可能對應自動機上多個結點,因此需要按照失配指標跳轉統計。統計過的結點需要特殊標記,避免重複統計,否則會超時。
1 #include2 #include3 #include4 inline intgetint()
11const
int n=1e6+1,s=26;12
char
s[n];
13int ans=0;14
class
ahocorasick
21int idx(const
char &c) const
24public:25
void insert(const
char
s) 31 val[p]++;32}
33void
get_fail()
37while(!q.empty())
44 fail[ch[x][i]]=ch[fail[x]][i];
45q.push(ch[x][i]);46}
47q.pop();48}
49}50void find(const
char
s) 58}59
}60};61
ahocorasick ac;
62int
main()
68ac.get_fail();
69 scanf("%s"
,s);
70ac.find(s);
71 printf("
%d\n
",ans);
72return0;
73 }
洛谷 3808 模板 AC自動機(簡單版)
題目傳送門 終於看懂啦!終於學會了ac自動機啦!flag立起 寫篇部落格梳理一下自己的思路吧。在文章的開頭,必須先放上一些大佬的部落格來壓壓場面 當然是orz zzk大佬,神犇傳送門 然而ac自動機的原理其實是比較好理解的,就是把trie樹和kmp的思想結合起來。這麼說起來kmp就是單個字串的ac自...
AC自動機模板1 洛谷3808
這是一道簡單的ac自動機模版題。用於檢測正確性以及演算法常數。為了防止卡oj,在保證正確的基礎上只有兩組資料,請不要惡意提交。題目描述 給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。乙個數表示答案 輸入樣例 1...
AC自動機 洛谷P3808 AC自動機(簡單版)
給定 n n 個模式串和1個文字串,求有多少個模式串在文字串裡出現過 多模匹配用ac role presentation aca c自動機 首先建造一棵字典樹,新增所有模式串,然後建造失配指標,最後進行匹配 luogu judger enable o2 include include include...