回文自动机

· · 个人记录

回文自动机

回文自动机与AC自动机是实现思想非常类似,可以类比。

1. 变量定义

AC 回文
fa[x] x号节点表示的串的最长存在后缀 x号节点表示的回文串的最长存在的回文后缀
s[x][i] x号节点后接字母i后所得的串 x号节点两端接字母i后所得的回文串

不过为了判断回文串的存在性,要进而维护数组len表示回文串x的长。

2. 构造方法

3. 代码

  void ins(int c,int p){
        for(x=y;S[p]!=S[p-l[x]-1];x=Fa[x]);
        if(s[x][c]) return y=s[x][c],void();
        l[s[x][c]=y=++cnt]=l[x]+2;ok[y]=ok[x];
        if(x==1) return;
        for(x=Fa[x];S[p]!=S[p-l[x]-1];x=Fa[x]);Fa[y]=s[x][c];
  }