切记不用cin cout,超时太真实了
#include<bits/stdc++.h>
using namespace std;
const int maxn=110005;
int n;
int len[maxn*2];
char s[maxn],str[maxn*2];
void init()
{
memset(str,0,sizeof(str));
memset(len,0,sizeof(len));
n=strlen(s);
int k=0;
str[k++]='$';
for(int i=0;i<n;i++){
str[k++]='#';
str[k++]=s[i];
}
str[k++]='#';
n=k;
}
int Manacher()
{
int ans=0,mx=0,id;
for(int i=1;i<n;i++){
if(i<mx) len[i]=min(mx-i,len[2*id-i]);
else len[i]=1;
while(str[i-len[i]]==str[i+len[i]]) len[i]++;
if(len[i]+i>mx){
mx=len[i]+i;
id=i;
ans=max(ans,len[i]);
}
}
return ans-1;
}
int main()
{
while(~scanf("%s",s)){
init();
printf("%d\n",Manacher());
}
return 0;
}