HDU 2222 Keywords Search
2016-10-07 01:19
351 查看
题目地址
AC自动机模板
AC自动机模板
#include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; const int Nmax=1000005; const int Totmax=500005; struct Aho { struct State { int next[26]; int cnt,fail; }state_table[Totmax]; int size; queue<int> Q; void init() { while(Q.size()) Q.pop(); for(int i=0;i<Totmax;i++) { for(int j=0;j<26;j++) state_table[i].next[j]=-1; state_table[i].fail=state_table[i].cnt=0; } size=1; } void insert(char *s) { int n=strlen(s); int now=0; for(int i=0;i<n;i++) { char c=s[i]; if(state_table[now].next[c-'a']==-1) state_table[now].next[c-'a']=size++; now=state_table[now].next[c-'a']; } state_table[now].cnt++; } void build() { Q.push(0); state_table[0].fail=0; while(Q.size()) { int now=Q.front(); Q.pop(); for(int i=0;i<26;i++) { if(now==0) { if(state_table[now].next[i]==-1) state_table[now].next[i]=0; else { state_table[ state_table[now].next[i] ].fail=0; Q.push(state_table[now].next[i]); } } else { if(state_table[now].next[i]==-1) { state_table[now].next[i]=state_table[ state_table[now].fail ].next[i]; } else { state_table[ state_table[now].next[i] ].fail=state_table[ state_table[now].fail ].next[i]; Q.push(state_table[now].next[i]); } } } } } int match(char *s) { int n=strlen(s); int ans=0; int now=0; for(int i=0;i<n;i++) { char c=s[i]; now=state_table[now].next[c-'a']; if(state_table[now].cnt) { int u=now; while(u) { ans+=state_table[u].cnt; state_table[u].cnt=0; u=state_table[u].fail; } } } return ans; } }aho; char s[Nmax]; int main() { int t; //freopen("in.in","r",stdin); scanf("%d",&t); while(t--) { int n; aho.init(); scanf("%d",&n); while(n--) { scanf("%s",s); aho.insert(s); } scanf("%s",s); aho.build(); printf("%d\n", aho.match(s)); } return 0; }
相关文章推荐
- 【hdu 2222】Keywords Search
- hdu 2222 Keywords Search
- HDU 2222 Keywords Search (AC自动机模板题)
- HDU 2222 Keywords Search (AC自动机)
- Ac自动机_hdu_2222_Keywords Search
- |Hdu 2222|AC自动机|Keywords Search
- HDU 2222 Keywords Search
- HDU 2222 Keywords Search(我的第一道AC自动机,模板题)
- HDU 2222 Keywords Search (AC自动机)
- HDU 2222 Keywords Search
- hdu 2222 - Keywords Search
- 【hdu 2222】Keywords Search 中文题意&题解&代码(C++)
- Keywords Search - HDU 2222 AC自动机
- [HDU]2222 Keywords Search
- HDU 2222 Keywords Search(AC自动机)
- HDU-2222 Keywords Search (AC自动机模板)
- HDU 2222 Keywords Search
- HDU 2222 Keywords Search[自动机]
- hdu 2222 Keywords Search
- HDU 2222 Keywords Search (ac自动机)