hdu2222 (AC自動機模板)

2022-05-01 11:39:09 字數 1075 閱讀 4483

題:

學習出:

主要是fail的建立。在跳的過程就是不斷跳fail,而不是跳到乙個fail再往下!!

#include#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int m=2e6+6

;int trie[m][26]; //

字典樹int cntword[m]; //

記錄該單詞出現次數

int fail[m]; //

失敗時的回溯指標

int cnt=0

;void insert(string

s) cntword[root]++; //

當前節點單詞數+1

}void

getfail()

}//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) }

return

ans;

}void

clear()

} int

n,t;

intmain()

fail[

0]=0

; getfail();

cin>>s;

cout

clear();

} return0;

}/*5ash

shex

bcdsha

shashe

2*/

view code

hdu 2222 ac自動機模板

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

HDU2222 AC自動機 入門模板

hdu 222 keywords search ac 自動機入門模板題 調了一下午 因為輸入最後乙個字串打成了 d還有兩處取反符號打錯 wa了無數次 血淚史 以後要注意 ac自動機思路 這個演算法的目的 用幾個給定的模式串去在乙個串 t 中匹配 簡單概括實現方式 1.對所有的模式串建trie樹。2....

HDU2222(AC自動機模板題)

aho corasick automaton,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法。ac自動機是字典樹和kmp的結合。可以解決的問題 給定多個單詞,再給乙個字串,問有多少個單詞在這個字串中出現過。這個問題可以用kmp挨個串匹配,但是如果單詞數目多的話肯定會超時。數中節點 st...