病毒侵襲持續中 AC自動機

2021-09-05 18:45:20 字數 692 閱讀 2376

傳送門

這裡闡述一下fail陣列的定義 , 對於 x  與 fail[x] 兩個點 , fail[x] 到根的字串與從x往上相同字元的字串相同

可以說 , fail[x]到根的字串是x到根的字串的字尾 

所以如果我們發現匹配傳可以匹配到x , 那麼fail[x] , fail[fail[x]] ... 都是可以匹配的

另外 , 如果我們匹配到了x , 下乙個字元就可以從ch[fail[x]][當前字母] 開始繼續匹配

#include#define n 50050

using namespace std;

int ch[n][26],fail[n],id[n],ans[n],vis[n],tot;

string s[1050]; int n;

void insert(string s,int id) }}

int main() build(); string s; cin>>s;

int len = s.length(),now=0;

for(int i=0;i'z')

now = ch[now][s[i]-'a'];

int j = now; while(j)

} for(int i=1;i<=n;i++) if(ans[id[i]]) cout

}

病毒侵襲持續中(AC自動機)

小t非常感謝大家幫忙解決了他的上乙個問題。然而病毒侵襲持續中。在小t的不懈努力下,他發現了網路中的 萬惡之源 這是乙個龐大的病毒 他有著好多好多的病毒,但是這個 包含的病毒很奇怪,這些病毒的特徵碼很短,而且只包含 英文大寫字元 當然小t好想好想為民除害,但是小t從來不打沒有準備的戰爭。知己知彼,百戰...

AC自動機(病毒侵襲 )

題目大意 中文題目 具體思路 ac自動機模板題,編號的時候注意,是按照給定的id進行編號的。然後輸出的時候注意去重,雖然按道理來講通過last陣列是不會有重複的,但是如果是這種情況,病毒模板aaa,然後給你乙個模板串aaaaa,這樣的話,就肯定會有重複的了,所以需要去重,其次輸出的時候按照公升序輸出...

暑假 ac自動機 C 病毒侵襲持續中

明明題目沒有說多組資料,然後我就當作一組資料來做了。看來看去 都沒有錯,但是一提交就wa,害我該了乙個下午。天啊!去找題解才知道是多組資料。不要被省略 有多組資料 而欺騙了。題意 中文題,詳見hdu 3065 思路 套ac自動機模板。注意 建trie樹時,字串的資訊 病毒編號 存放在最後乙個字母的 ...