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 ...