fourth ac zi dong ji(aho-corasick automation) of life
9a(其實不止交了10發...) 感言:
一開始多組資料這種小資料還是...無傷大局,因為改完以後還是wa...
一:最後發現是wa在構造fail指標的時候在建立臨時指標查詢有沒有匹配到的fail,在沒有匹配到的時候,結點的fail的指標要指向根。
二(重要感言):
在查詢時,往上回溯fail指標的時候,fail指標是一定會最終回溯到根的,而且,比如當前查詢到的主串是abcdef,fail指標可能會一直傳遞最終到根,但是並不是都有效啊!這裡還要注意,fail指標傳遞過去,找到的是子串,還是本來那個串的字尾串,為什麼說是子串:如果有模式串abcd,abcdef,主串是acbdef,主串到d的時候已經處理掉了abcd,這個情況下是不會用到fail指標的功效了,或者這裡沒有有效的字尾串;什麼時候會用fail指標呢,如果有模式串cd,bcd,abcdef,主串是acbdef,那麼在主串到d的時候會通過fail指標找到bcd,然後在找到cd,所以我們能得出,fail指標的回溯,當前串(比如abcd)最後那個d是一直不會變的,可以說fail指標都是d的fail指標!
三:不要依賴模板...2cc
aaaooxxcc%daaaoen....endooxxcc%daaaoen....endooxxcc%daaaoen....end
2abcde
bcdabcd
2abcde
bcdabcdef
//#include #include#include#include#include#includeusing namespace std;
typedef long long ll;
/*題意:
求不同的病毒出現的次數,未出現的不需要輸出
aaa其中aa出現2次;
思路:那我存的應該是編號了,編號都不同。
*/const int n=5e4+10;
struct trie
;trie q[n],*root;
int tol,ans[1010],n;
char ss[1010][51];
trie* creat()
void insert(char *str,int id)
p->id=id;
}void build_ac()
temp=temp->fail;
}if(temp==null) //如果沒有找到匹配的,則fail指向根
p->next[i]->fail=root;
}que.push(p->next[i]);}}
}}char word[2000010];
void query()
index=word[i]-'a';
while(p->next[index]==null && p!=root)
p=p->fail;
p=p->next[index];
if(p==null)
p=root;
trie *temp=p;
while(temp!=root) //回溯到根
}for(int i=1; i<=n; i++)
}int main()
getchar();
build_ac();
gets(word);
query();
}return 0;
}
;
HDU3065 AC自動機 AC感言
fourth ac zi dong ji aho corasick automation of life 9a 其實不止交了10發.感言 一開始多組資料這種小資料還是.無傷大局,因為改完以後還是wa.一 最後發現是wa在構造fail指標的時候在建立臨時指標查詢有沒有匹配到的fail,在沒有匹配到的時...
病毒侵襲持續中 HDU 3065 ac自動機
小t非常感謝大家幫忙解決了他的上乙個問題。然而病毒侵襲持續中。在小t的不懈努力下,他發現了網路中的 萬惡之源 這是乙個龐大的病毒 他有著好多好多的病毒,但是這個 包含的病毒很奇怪,這些病毒的特徵碼很短,而且只包含 英文大寫字元 當然小t好想好想為民除害,但是小t從來不打沒有準備的戰爭。知己知彼,百戰...
病毒侵襲持續中 HDU 3065 AC自動機
小t非常感謝大家幫忙解決了他的上乙個問題。然而病毒侵襲持續中。在小t的不懈努力下,他發現了網路中的 萬惡之源 這是乙個龐大的病毒 他有著好多好多的病毒,但是這個 包含的病毒很奇怪,這些病毒的特徵碼很短,而且只包含 英文大寫字元 當然小t好想好想為民除害,但是小t從來不打沒有準備的戰爭。知己知彼,百戰...