bzoj千题计划304:bzoj3676: [Apio2014]回文串
Posted 日拱一卒 功不唐捐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj千题计划304:bzoj3676: [Apio2014]回文串相关的知识,希望对你有一定的参考价值。
https://www.lydsy.com/JudgeOnline/problem.php?id=3676
回文自动机模板题
4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 300001 char ss[N]; int s[N]; int tot=1,last; int fail[N],len[N],cnt[N]; int tr[N][26]; int p,c,np,t; void extend(int i) { p=last; c=s[i]; while(s[i-1-len[p]]!=c) p=fail[p]; if(!tr[p][c]) { np=++tot; len[np]=len[p]+2; t=fail[p]; while(s[i-1-len[t]]!=c) t=fail[t]; fail[np]=tr[t][c]; tr[p][c]=np; } else np=tr[p][c]; cnt[last=np]++; } int main() { scanf("%ss",ss+1); int n=strlen(ss+1); s[0]=-1; for(int i=1;i<=n;++i) s[i]=ss[i]-\'a\'; fail[0]=1; len[1]=-1; for(int i=1;i<=n;++i) extend(i); for(int i=tot;i>1;--i) cnt[fail[i]]+=cnt[i]; long long ans=0; for(int i=2;i<=tot;++i) ans=max(ans,1LL*cnt[i]*len[i]); printf("%lld",ans); }
以上是关于bzoj千题计划304:bzoj3676: [Apio2014]回文串的主要内容,如果未能解决你的问题,请参考以下文章
bzoj千题计划118:bzoj1028: [JSOI2007]麻将
bzoj千题计划144:bzoj1176: [Balkan2007]Mokia