萌新求助

回复帖子

@Hiraeth  2019-09-11 21:58 回复
#include<bits/stdc++.h>
using namespace std;
int n,tot,len,mx,mid,ans,p[1000005],l[1000005],r[1000005];
char a[1000005],s[1000005];
int main(){
    cin>>a;
    len=strlen(a);
    s[tot]='~';
    s[++tot]='|';
    for (int i=0;i<len;i++){
        s[++tot]=a[i];
        s[++tot]='|';
    }
    for (int i=1;i<=tot;i++){
        if (i<mx) p[i]=max(mx-i,p[2*mid-i]);
        else p[i]=1;
        while (s[i+p[i]]==s[i-p[i]]) p[i]++;
        if (i+p[i]>mx){
            mid=i;
            mx=i+p[i];
        }
        l[i-p[i]+1]=max(l[i-p[i]+1],p[i]-1);
        r[i+p[i]-1]=max(r[i+p[i]-1],p[i]-1);
    }
    for (int i=tot;i>=1;i-=2) r[i]=max(r[i],r[i+2]-2);
    for (int i=1;i<=tot;i+=2) l[i]=max(l[i],l[i-2]-2);
    for (int i=1;i<=tot;i+=2) 
        if (r[i]&&l[i]) ans=max(ans,l[i]+r[i]);
    printf("%d\n",ans);
    return 0;
}
@Venus 2019-09-11 22:12 回复 举报

最后那三个 for 都是从 2 开始(一个是到 2 结束)的吧

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。