模板積累 AC自動機(寫了也不能自動AC)

2021-09-26 00:15:54 字數 803 閱讀 4258

#include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

const int maxn = 2*1e6+9;

int trie[maxn][26]; //字典樹,用struct建同理,這裡不再贅述

int cntword[maxn]; //記錄該單詞出現次數

int fail[maxn]; //失敗時的回溯指標

int cnt = 0;

void insertwords(string s)

}//fail[now] ->當前節點now的失敗指標指向的地方

tire[now][i] -> 下乙個字母為i+'a'的節點的下標為tire[now][i]

while(!q.empty())

else//否則就讓當前節點的這個子節點

//指向當前節點fail指標的這個子節點

trie[now][i] = trie[fail[now]][i];}}

}//我們並不關心在查詢過程中該節點具體失配與否,

//只是在建樹的時候搭建所有節點的失配指標,這樣便形成自動機

int query(string s)

fail[0] = 0;

getfail();

cin >> s ;

cout << query(s) << endl;

return 0;

}

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...