最长回文子串
/*https://www.cnblogs.com/fan1-happy/p/11166182.html*/# include <bits/stdc++.h>using namespace std;const int MAXN=2e7+100;char s[MAXN],s_new[MAXN];int p[MAXN];int init(){ int len=strlen(s); s_new[0]='$'; s_new[1]='#'; int j=2; for(int i=0;i<len;++i){ s_new[j++]=s[i]; s_new[j++]='#'; } s_new[j]='\0'; return j;}int manacher(){ int len=init(); int ans=-1; int id,mx=0; for(int i=1;i<=len;++i){ if(i<mx) p[i]=min(p[2*id-i],mx-i); else p[i]=1; while(s_new[i-p[i]]==s_new[i+p[i]]) p[i]++; if(mx<i+p[i]){ id=i; mx=i+p[i]; } ans=max(ans,p[i]-1); } return ans;}int main(){ cin.getline(s,MAXN); printf("%d",manacher()); return 0;}