在什么时候回文自动机插入完后的 last 不等于 tot。
或者换一种表达:
void ins(int u,int n) { int cur=getfail(last,n); if(!tr[cur][u]) { ++tt; len[tt]=len[cur]+2; fail[tt]=tr[getfail(fail[cur],n)][u]; num[tt]=num[fail[tt]]+1; tr[cur][u]=tt; } last=tr[cur][u]; }
什么时候 if 分支不会进入
int gettrans(int x,int n) { while(s[n-len[x]-1]!=s[n]||(len[x]+2<<1)>len[tt])x=fail[x]; return x; }
初始的 x 为什么是 trans[cur] 是对的,fail[cur] 会TLE
PAM时间复杂度证明。