HDU 病毒侵襲(AC自動機模板題)

2021-06-26 10:10:23 字數 1004 閱讀 7357

ac自動機的模板題,由於輸入的字串中的字元不保證全為小寫字母,所以範圍應該在130之前,而前31位字元是不可能出現在字串的(不懂得查下acsii表就行了),所以只需要開的結點陣列大小為130足夠了,如果開256就會記憶體超限。

11908775

2014-10-19 10:45:38

accepted

2896

250ms

29596k

2760 b

g++kinderriven

輸入只有一組,所以不用擔心超時的問題。

#include#include#include#include#includeusing namespace std;

const int maxn = 111111;

const int max_size = 130;

const int maxd = 222;

vectorg[1111];

struct trie

void init()

int newnode()

void insert(char *str,int pos)

val[u] = pos;

//printf("%d %d\n",u,pos);

}void build()

}while(!q.empty())}}

}void count(char *str,int pos)

}return;

}};trie ac;

int main()

//printf("%d\n",ac.sz);

ac.build();

scanf("%d",&m);

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

int cnt = 0;

for(int i = 1; i <= m; i++)if(g[i].size())

printf("total: %d\n",cnt);

}

hdu 2896 病毒侵襲 ac自動機模板題

和上一道題不同的是這個題目的mark陣列是標記一下到底是第幾個串,因為匹配串中不同模式串個數不大於3,不過有可能相同串個數很多 雖然我陣列只開了10過了.還有就是字元的個數從26個飆公升到127.所以建立字典樹的時候需要做一些小的改動。查詢到某個模式串標記一下,排序去重輸出即可.include in...

AC自動機(病毒侵襲 )

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

hdu2896 AC自動機 病毒侵襲

同樣是一道很裸的ac自動機,統計哪些特徵碼出現在 的原始碼上,匹配成功時不要將val賦值為0,因為後面還有文字串要匹配,另外要注意編號需要從小到大輸出。include include includeusing namespace std const int maxn 100000 10 const ...