码迷,mamicode.com
首页 > Windows程序 > 详细

bzoj千题计划304:bzoj3676: [Apio2014]回文串

时间:2018-04-01 18:57:11      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:fine   span   void   分享   using   tps   AC   回文串   geo   

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]回文串

标签:fine   span   void   分享   using   tps   AC   回文串   geo   

原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/8687331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!