#include <bits/stdc++.h>
using namespace std;
const int N = 44000005;
int n, pal[N], ans = 1;
char S[N<<1], c;
void manacher(){
int r = 0, mid;
for(int i = 1; i < n; i++){
if(i < r)
pal[i] = min(pal[(mid<<1) - i], r - i + 1);
else pal[i] = 1;
while(S[i + pal[i]] == S[i - pal[i]]) pal[i]++;
if(i + pal[i] > r) r = i + pal[i], mid = i;
}
}
int main(){
c = getchar();
S[0] = S[++n] = '#';
while(~c){
S[++n] = c;
S[++n] = '#';
c = getchar();
}
S[++n] = 0;
manacher();
for(int i = 0; i < n; i++)
ans = max(ans, pal[i]);
printf("%d\n", ans-1);
return 0;
}
把12行的 r - i + 1 改成 r - i 就过了,不知道为什么,从 i 到 r 的最大半径不就是 r-i+1 吗?