模板—字符串—回文自動機
阿新 • • 發佈:2019-04-04
algorithm for != names space def 自動機 algo code
模板—字符串—回文自動機
Code:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 500010 int nxt[N][26],tot=1,fa[N]={1,1},last,n; long long size[N],len[N]={0,-1}; char str[N]; void insert(int x,int now) { int p=last; while(str[now-len[p]-1]!=str[now]) p=fa[p]; if(!nxt[p][x]) { int q=fa[p]; while(str[now-len[q]-1]!=str[now]) q=fa[q]; fa[++tot]=nxt[q][x],nxt[p][x]=tot,len[tot]=len[p]+2; } last=nxt[p][x],size[last]++; } int main() { scanf("%s",str+1),n=strlen(str+1); for(int i=1;i<=n;i++) insert(str[i]-‘a‘,i); for(int i=tot;i>1;i--) size[fa[i]]+=size[i]; }
模板—字符串—回文自動機