rt,提交记录
把样例下载下来本机测 1s 不到,不知道为什么交上去就 T 了。
#include <bits/stdc++.h>
using namespace std;
string a,s;
int n,ans,p[200005];
int l[200005],r[200005];
int main(){
// freopen("P4555_3.in","r",stdin);
// freopen("P")
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>a;n=a.size();
a='*'+a;s="~|";
int cnt=1;
for(int i=1;i<=n;i++)s=s+a[i]+'|';
n=n*2+2;s=s+'#';
int j=0,mid;
for(int i=1;i<=n;i++){
if(i<j)p[i]=min(p[mid*2-i],j-i);
else p[i]=1;
while(s[i+p[i]]==s[i-p[i]])p[i]++;
if(p[i]+i>j)j=p[i]+i,mid=i;
r[i+p[i]-1]=max(r[i+p[i]-1],p[i]-1);
l[i-p[i]+1]=max(l[i-p[i]+1],p[i]-1);
}
for(int i=n;i>=1;i-=2)r[i]=max(r[i],r[i+2]-2);
for(int i=1;i<=n;i+=2)l[i]=max(l[i],l[i-2]-2);
for(int i=1;i<=n;i+=2)if(r[i]&&l[i])ans=max(ans,l[i]+r[i]);
cout<<ans<<endl;
return 0;
}