#include<bits/stdc++.h>
using namespace std;
char aa[1101000],s[2202000];
int n,p[2202000];
void change()
{
s[0]='-';
s[1]='#';
for(int i=1;i<=n;i++)
{
s[i*2]=aa[i-1];
s[i*2+1]='#';
}
}
void go()
{
int id=0,l=0,r=0,mmax=0;
for(int i=1;i<=2*n;i++)
{
if(i<=r)p[i]=min(p[(id<<1)-i],r-i+1);
while(s[i-p[i]]==s[i+p[i]])p[i]++;
if(p[i]+i>r)
{
r=p[i]+i-1,id=i;
}
if(p[i]>mmax)
mmax=p[i];
}
printf("%d",mmax-1);
return;
}
int main()
{
gets(aa);
n=strlen(aa);
change();
go();
return 0;
}
在本地能直接复制进去但是不能手动输入,洛谷上RE。51nod上通过。。。求助(已经试过不用gets了)