void ad(int x)
{
if(a[last].ch[x])
{
if(a[last].len+1==a[a[last].ch[x]].len)
{
last=a[last].ch[x];
return;
}
int t1=a[last].ch[x],t2=++tot;
a[t2]=a[t1];
a[t2].len=a[last].len+1;
a[t1].fa=t2;
for(;last&&a[last].ch[x]==t1;last=a[last].fa)
a[last].ch[x]=t2;
last=t2;
return;
}
int p=last,k=last=++tot;
a[k].len=a[p].len+1;
for(;p&&!a[p].ch[x];p=a[p].fa) a[p].ch[x]=k;
if(!p) a[k].fa=1;
else{
int t1=a[p].ch[x];
if(a[t1].len==a[p].len+1) a[k].fa=t1;
else{
int t2=++tot;
a[t2]=a[t1];
a[t2].len=a[p].len+1;
a[t1].fa=a[k].fa=t2;
for(;p&&a[p].ch[x]==t1;p=a[p].fa)
a[p].ch[x]=t2;
}
}
}
咕。。
原文:https://www.cnblogs.com/ezuyz/p/15086116.html