首页 > 其他 > 详细

模板—字符串—回文自动机

时间:2019-04-04 19:38:07      阅读:116      评论:0      收藏:0      [点我收藏+]

模板—字符串—回文自动机

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];
}

  

模板—字符串—回文自动机

原文:https://www.cnblogs.com/yangsongyi/p/10656487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!