HDU 2222 Keywords Search(AC自动机)
来源:互联网 发布:无用神力兄弟会 知乎 编辑:程序博客网 时间:2024/06/09 23:06
自动机入门题
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<set>#include<map>#include<string>#include<cstring>#include<stack>#include<queue>#include<vector>#include<cstdlib>#define lson (rt<<1),L,M#define rson (rt<<1|1),M+1,R#define M ((L+R)>>1)#define cl(a,b) memset(a,b,sizeof(a));#define LL long long#define P pair<int,int>#define X first#define Y second#define pb push_back#define fread(zcc) freopen(zcc,"r",stdin)#define fwrite(zcc) freopen(zcc,"w",stdout)using namespace std;const int maxn=6000005;const int inf=1<<28;struct Tire{ int next[maxn][26],fail[maxn],end[maxn]; int root,L; int newnode(){ for(int i=0;i<26;i++){ next[L][i]=-1; } end[L]=0; return L++; } void init(){ L=0; root=newnode(); } void insert(char buf[],int val){ int len=strlen(buf); int now=root; for(int i=0;i<len;i++){ if(next[now][buf[i]-'a']==-1) next[now][buf[i]-'a']=newnode(); now=next[now][buf[i]-'a']; } end[now]++; } void build(){ queue<int> q; fail[root]=root; for(int i=0;i<26;i++){ if(next[root][i]==-1) next[root][i]=root; else { fail[next[root][i]]=root; q.push(next[root][i]); } } while(!q.empty()){ int now=q.front();q.pop(); for(int i=0;i<26;i++){ if(next[now][i]==-1) next[now][i]=next[fail[now]][i]; else { fail[next[now][i]]=next[fail[now]][i]; q.push(next[now][i]); } } } } int query(char buf[]){ build(); int len=strlen(buf); int ans=0; int now=root; for(int i=0;i<len;i++){ now=next[now][buf[i]-'a']; int tmp=now; while(tmp!=root){ ans+=end[tmp]; end[tmp]=0; tmp=fail[tmp]; } } return ans; }}ac;char s[maxn];int main(){ int T; scanf("%d",&T); while(T--){ ac.init(); int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s",s); ac.insert(s,1); } scanf("%s",s); printf("%d\n",ac.query(s)); } return 0;}
0 0
- HDU 2222 Keywords Search (AC自动机)
- hdu 2222 Keywords Search //ac自动机
- hdu 2222 Keywords Search AC自动机详解
- hdU 2222 Keywords Search(AC自动机)
- hdu 2222 Keywords Search--AC自动机
- hdu 2222 Keywords Search(AC自动机)
- hdu 2222 Keywords Search AC自动机 模板
- hdu 2222 Keywords Search AC自动机 模板
- hdu 2222 Keywords Search(AC自动机)
- HDU 2222 Keywords Search(AC自动机)
- hdu 2222 Keywords Search(AC自动机模板)
- HDU 2222 Keywords Search 【AC自动机模板】
- hdu 2222 Keywords Search AC自动机
- HDU 2222 Keywords Search (AC自动机)
- hdu - 2222 - Keywords Search(AC自动机)
- [HDU 2222]Keywords Search[AC自动机]
- hdu 2222 Keywords Search----AC自动机
- hdu 2222 Keywords Search(AC自动机)
- js window.open 打开页面并居中
- 文法相关
- Circle vs Triangle(DFS+博弈)
- java练习:金额转换,阿拉伯数字转换成中文传统形式
- poj 2195 Going Home【zkw费用流】
- HDU 2222 Keywords Search(AC自动机)
- Linux中Tomcat 自动设置CATALINA_HOME方法
- scala (6)柯里化
- 自旋锁在内核中的实现
- 'sessionFactory' or 'hibernateTemplate' is required
- 2.1.4 Shading in World Space (about uniforms) 在世界坐标系里着色(关于uniforms参数)
- 在c#中使用sqlite的两个注意点
- [BZOJ1878][SDOI2009]HH的项链
- Lambda 表达式