AC自动机模板题(膜jcvb代码)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <queue>
using namespace std;
char s[],tt[],Ans[];
int ch[][],Fail[],lab[],cnt,nv[];
void Add(const char * str)
{
int p=,i;
for(i=;str[i];++i)
{
if(!ch[p][str[i]-])ch[p][str[i]-]=++cnt;
p=ch[p][str[i]-];
}
lab[p]=i-;
return ;
}
void Build()
{
int i,t;
queue<int> Q;
Q.push();
while(!Q.empty())
{
t=Q.front();Q.pop();
for(i=;i<;++i)
{
if(ch[t][i])
{
Q.push(ch[t][i]);
Fail[ch[t][i]]=t?ch[Fail[t]][i]:;
}
else ch[t][i]=ch[Fail[t]][i];
}
}
return ;
}
int main()
{
int i,q,p,top=;
scanf("%s",s+);
scanf("%d",&q);
for(i=;i<=q;++i)
{
scanf("%s",tt+);
Add(tt);
}
Build();
p=;
for(i=;s[i];++i)
{
p=ch[p][s[i]-];
++top;
Ans[top]=s[i];
nv[top]=p;
if(lab[p])top-=lab[p],p=nv[top];
}
for(i=;i<=top;++i)printf("%c",Ans[i]);
printf("\n");
return ;
}
[Bzoj3940] [AC自动机,USACO 2015 February Gold] Censor [AC自动机模板题]的相关教程结束。