标签:des style blog http color java os io
1 5 she he say shr her yasherhs
3
#include<cstdio> const int N = 10010; char str[1000005]; struct node { node *next[26]; node *fail; int count; node() { for(int i = 0; i < 26; i++) next[i] = NULL; count = 0; fail = NULL; } }*q[50*N]; node *root; int head, tail; void Insert(char *str) { node *p = root; int i = 0, index; while(str[i]) { index = str[i] - 'a'; if(p->next[index] == NULL) p->next[index] = new node(); p = p->next[index]; i++; } p->count++; } void build_ac_automation(node *root) { root->fail = NULL; q[tail++] = root; while(head < tail) { node *temp = q[head++]; node *p = NULL; for(int i = 0; i < 26; i++) { if(temp->next[i] != NULL) { if(temp == root) temp->next[i]->fail = root; else { p = temp->fail; while(p != NULL) { if(p->next[i] != NULL) { temp->next[i]->fail = p->next[i]; break; } p = p->fail; } if(p == NULL) temp->next[i]->fail = root; } q[tail++] = temp->next[i]; } } } } int Query(node *root) { int i = 0, cnt = 0, index; node *p = root; while(str[i]) { index = str[i] - 'a'; while(p->next[index] == NULL && p != root) p = p->fail; p = p->next[index]; if(p == NULL) p = root; node *temp = p; while(temp != root && temp->count != -1) { cnt += temp->count; temp->count = -1; temp = temp->fail; } i++; } return cnt; } int main() { int T, n; scanf("%d",&T); while(T--) { head = tail = 0; root = new node(); scanf("%d",&n); while(n--) { scanf("%s", str); Insert(str); } build_ac_automation(root); scanf("%s",str); printf("%d\n", Query(root)); } return 0; }
hdu 2222 Keywords Search(AC自动机模板题),布布扣,bubuko.com
hdu 2222 Keywords Search(AC自动机模板题)
标签:des style blog http color java os io
原文地址:http://blog.csdn.net/lyhvoyage/article/details/38584681