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

2021-07-04 05:34:33 字數 1129 閱讀 9238

明明題目沒有說多組資料, 然後我就當作一組資料來做了。

看來看去**都沒有錯,但是一提交就wa,害我該了乙個下午。天啊!

去找題解才知道是多組資料。不要被省略」有多組資料「而欺騙了。

/* 題意:中文題,詳見hdu 3065

思路:套ac自動機模板。

注意:建trie樹時,字串的資訊(病毒編號)存放在最後乙個字母的

value中,病毒特徵碼只包含「英文大寫字元」,所以孩子節點只需26個

沒遇到一種病毒,則把(病毒出現次數的)陣列對應的值+1。

*/ #include#include#include#includeusing namespace std;

const int maxm=2000100;//**長度

const int maxn=50010;//病毒最多的需要的節點數

char web[maxm];//**串

char virus[1010][55];//病毒存放的陣列

int virusn[1010];//對應位置病毒出現的次數

struct trie

void init()//初始化

void insert(char s,int k)//建樹

x=child[x][s[i]-'a'];

} value[x]=k;//對應資訊存放到最後乙個字母中

} void build()//構建fail陣列

else

}while(!q.empty())

else

}} }

void query(char s)//**匹配

x=temp=child[x][s[i]-'a'];

while(temp!=root)

temp=fail[temp];

}} }

}ac;

int main()

ac.build();//構造fail

getchar();

cin.getline(web,maxm);//輸入**,可能包含空格等

ac.query(web);//匹配

for(int i=1;i<=n;i++)

{ if(virusn[i])//初始為0,只要出現過這種病毒則》0

{cout<

病毒侵襲持續中 AC自動機

傳送門 這裡闡述一下fail陣列的定義 對於 x 與 fail x 兩個點 fail x 到根的字串與從x往上相同字元的字串相同 可以說 fail x 到根的字串是x到根的字串的字尾 所以如果我們發現匹配傳可以匹配到x 那麼fail x fail fail x 都是可以匹配的 另外 如果我們匹配到了...

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

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

AC自動機(病毒侵襲 )

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