ac自動機背誦用模板
阿新 • • 發佈:2019-02-17
void insert(){
scanf("%s",ch+1);
int l=strlen(ch+1),now=1;
for(int i=1;i<=l;i++)
{
int t=ch[i]-'A'+1;
if(!to[now][t])to[now][t]=++cnt;
now=to[now][t];
}
danger[now]=1;
}
void build_fail(){
int head=1,tail=1;
q[1]=1;
while(head!=tail)
{
int now=q[head];head++;
for(int i=1;i<=26;i++)
if(int t=to[now][i])
{
int k=fail[now];
while(!to[k][i])k=fail[k];
fail[t]=to[k][i];
q[++tail]=t;
}
}
}
scanf("%s",ch+1);
int l=strlen(ch+1),now=1;
for(int i=1;i<=l;i++)
{
int t=ch[i]-'A'+1;
if(!to[now][t])to[now][t]=++cnt;
now=to[now][t];
}
danger[now]=1;
}
void build_fail(){
int head=1,tail=1;
q[1]=1;
while(head!=tail)
{
int now=q[head];head++;
for(int i=1;i<=26;i++)
if(int t=to[now][i])
{
int k=fail[now];
while(!to[k][i])k=fail[k];
fail[t]=to[k][i];
q[++tail]=t;
}
}
}