AC自動機模板

2022-08-11 21:21:11 字數 747 閱讀 2586

如果輸入資料重複,可以加入vis記錄字典樹的單詞結點是否被經歷過,防止同乙個data統計出現次數時重複count

#include#include

#include

using

namespace

std;

const

int maxnode=11000

; const

int sigma_size=26

; struct

ac_automata

//insert負責構造ch與val陣列

//插入字串,v必須非0表示乙個單詞節點

void insert(char *s,int

v)

u=ch[u][id];

} val[u]=v;

} //getfail函式負責構造f和last陣列

void

getfail()

} while(!q.empty())//

按bfs順序計算fail

} }

//遞迴列印與結點i字尾相同的字首節點編號

//進入此函式前需保證val[i]>0

void print(int

i)

} //在s中找出 出現了哪幾個模板單詞

void find(char *s)

} };

ac_automata ac;

AC自動機模板

ac自動機模板 ac自動機模板 使用方法 1 init 初始化函式 2 insert str 插入字串函式 3 build 構建ac自動機 4 query str 返回出現的字串個數 使用需注意事項 1 注意輸入的字元的範圍,需對next和其二維大小及相關引數進行更改 2 注意next fail和e...

AC自動機模板

ac自動機主要是用於多模式串的匹配問題,按照我的理解,ac自動機就是在tire樹上實現kmp演算法,由於ac自動機加入了失敗指標,所以可以把他看成乙個狀態轉移的圖。給出模板 include include include include includeusing namespace std cons...

模板 AC自動機

我覺得ac自動機的難點和核心是構建失敗指標,父親的失敗指標的兒子 son2 中有和兒子 son1 相同的,即為son1的失敗指標 例 還是有個不懂的地方 第90行,跪求大佬賜教 include include include include include include include inclu...