hdu 2222 AC 自動機 模版(陣列實現)

2021-09-25 08:02:11 字數 1069 閱讀 2222

ac 自動機 模版 原文匹配查詢時講錯了,其他都挺好(原文博主知錯懶得改

t個樣例,n個單詞,乙個文字串,求文字串中單詞出現的次數。 若給出單詞ab,ab 文字ab,匹配數為2 

若給出 n個不重複的單詞和乙個文字,問單詞的出現次數,則cntword[j]不置-1,且迴圈條件變為 j !=0。 

如單詞aa , bb cc. 串ooxxcc%daaaoen....end,則串 aa出現2次, cc出現 1次

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

typedef long long ll;

const int maxn = 1e6+9;

int trie[maxn][26]; //字典樹

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

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

int cnt = 0;//結點個數

void insertwords(char s,int len)

}//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(char s,int len)

} return ans;

}int main()

fail[0] = 0;

getfail();

scanf("%s",s);//查詢文字串

cout << query(s,strlen(s)) << endl;

} return 0;}/*

4ash shex bcd sha

ashex

*/

hdu 2222 ac自動機模版

include include structnode q 1000010 charss 1010 s 55 voidinsert chars,node root p num voidacmove node root p p fail if p null now next i fail root q ...

hdu 2222 ac自動機模板

題意 題意 給出n個串,然後給一篇文章,問這n個串有多少個在文章裡面出現過。trick n個串可能有相同的,需按照不同串處理。剛學ac自動機,沒學明白,這 也是照著別人部落格寫的,弱爆 include include include include include using namespace s...

hdu2222 (AC自動機模板)

題 學習出 主要是fail的建立。在跳的過程就是不斷跳fail,而不是跳到乙個fail再往下!include include include include include using namespace std typedef long long ll const int m 2e6 6 int ...