本题的样例有点水了
第一次提交的代码

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<stack>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int N=1400;
char a[N];
char manacher[N<<1];
int p[N<<1];
int main()
{
    while(scanf("%s",a)!=EOF){
        memset(p,0,sizeof p);
        memset(manacher,0,sizeof manacher);
        int T=0;
        int n=strlen(a);
        for(int i=0;i<n;i++){
            manacher[T++]='#';
            manacher[T++]=a[i];
        }
        manacher[T++]='#';  //初始化数组
        int maxid=0;
        int id=0;
        int ans=0;
        for(int i=0;i<T;i++){
            if(maxid>i){
                p[i]=min(maxid-i,p[id*2-i]);
            }
            else{
                p[i]=1;

            }
            while(manacher[i-p[i]]==manacher[i+p[i]]) p[i]++;
            if(i+p[i]>maxid){
                maxid=i+p[i];
                id=i;
            }
            ans=max(ans,p[i]-1);
        } 
        cout<<ans<<"\n";
    }
}

如果开始输入的就是回文串,则该代码无法正确输出,因为while循环会一直运行
后来在while循环那里加了一个判断 如果p[i]+i>字符串总长度时直接结束循环,可以得到正确的答案

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<stack>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int N=1400;
char a[N];
char manacher[N<<1];
int p[N<<1];
int main()
{
    while(scanf("%s",a)!=EOF){
        memset(p,0,sizeof p);
        memset(manacher,0,sizeof manacher);
        int T=0;
        int n=strlen(a);
        for(int i=0;i<n;i++){
            manacher[T++]='#';
            manacher[T++]=a[i];
        }
        manacher[T++]='#';  //初始化数组
        int maxid=0;
        int id=0;
        int ans=0;
        for(int i=0;i<T;i++){
            if(maxid>i){
                p[i]=min(maxid-i,p[id*2-i]);
            }
            else{
                p[i]=1;

            }
            while(manacher[i-p[i]]==manacher[i+p[i]])
            {
                if(i+p[i]>=T){
                    break;
                }
                p[i]++;
             } 
            if(i+p[i]>maxid){
                maxid=i+p[i];
                id=i;
            }
            ans=max(ans,p[i]-1);
        } 
        cout<<ans<<"\n";
    }
}