AC自动机模板
2017-09-21 17:29
351 查看
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include<ctime> #define N 10000090 using namespace std; int n; int date[5000500][26],fail ,cnt ,tot=0,ans=0; int st,pt; char str ,ptr ; queue<int> q; void build() { for(int i=0;i<26;i++) if(date[0][i]) q.push(date[0][i]); while(!q.empty()) { int re=q.front();q.pop(); for(int i=0;i<26;i++) { if(!date[re][i]) { date[re][i]=date[fail[re]][i];//直接跳转避免while continue; } q.push(date[re][i]); fail[date[re][i]]=date[fail[re]][i]; } } } int main() { double a=clock(); freopen("in.in","r",stdin); freopen("my.out","w",stdout); scanf("%d",&n); while(n--) { scanf("%s",str+1);st=strlen(str+1); int j=0; for(int i=1;i<=st;i++) { if(!date[j][str[i]-'a']) date[j][str[i]-'a']=++tot; j=date[j][str[i]-'a']; } cnt[j]++; } build(); scanf("%s",ptr+1);pt=strlen(ptr+1); int j=0; for(int i=1;i<=pt;i++) { j=date[j][ptr[i]-'a']; for(int t=j; t && cnt[t]!=-1;t=fail[t]) { ans+=cnt[t];cnt[t]=-1; } } cout<<ans<<endl; cout<<clock()-a<<endl; return 0; }
相关文章推荐
- hdu 2222 AC自动机模板题
- AC自动机 模板
- hdu 2222 Keywords_ac自动机模板
- luogu P3796【模板】AC自动机(加强版)
- luogu P3808 【模板】AC自动机(简单版)
- 模板 AC自动机
- 【AC自动机】AC自动机模板
- [模板] - AC自动机 - 静态 - 感谢小太阳
- hdu -2222 Keywords Search(AC自动机模板)
- 算法模板——AC自动机
- ac自动机模板 1
- AC自动机 ( 静态建树模板 )——Substring ( UVA 11468 )
- AC自动机模板(数组实现版)
- 模板 AC自动机
- hdu 2222 ac自动机 模板
- hdu 2222 Keywords Search(AC自动机模板)
- AC自动机入门+模板 (HDU 2222)
- ACM常用模板——ac自动机
- HDU 2222 Keywords Search 【AC自动机模板】
- [模板] - AC自动机 - 动态 - 感谢小太阳