AC代码
#include<stdio.h>
#include<string.h>
#include<iostream>
#define maxn 9999999
#define N 100005
using namespace std;
char a[N*2];
int p[N*2];
char b[N];
int main()
{
while(~scanf("%s",b+1))
{
memset(a,0,sizeof(a));
memset(p,0,sizeof(p));
a[0]='$';
a[1]='#';
int l=strlen(b+1);
for(int i=1;i<=l;i++)
{
a[i*2]=b[i];
a[i*2+1]='#';
}
int id,mi;
id=mi=0;
for(int i=1;i<=l*2+1;i++)
{
if(mi>=i)
p[i]=min(p[id*2-i],mi-i);
int h=a[i];
while(a[i-p[i]]==a[i+p[i]])p[i]++;
if(mi<i+p[i])
{
id=i;mi=id+p[i];
}
}
int ma=0;
for(int i=1;i<=2*l+1;i++)
ma=max(ma,p[i]);
printf("%d\n",ma-1);
}
}