1 条题解
-
0
C++ :
#include<iostream> #include<algorithm> #include<string.h> #define maxn 111000 using namespace std; char str[maxn],str1[maxn*2]; int n,ans,nxt[maxn*2]; void Manacher() { memset(nxt,0,sizeof(nxt)); int mx=0,id; for(int i=1;i<n;i++) { if(mx>i) nxt[i]=min(nxt[2*id-i],mx-i); else nxt[i]=1; for(;str1[i-nxt[i]]==str1[i+nxt[i]];nxt[i]++); if(i+nxt[i]>mx) { mx=i+nxt[i]; id=i; } } } void pre() { int i=0,k=1,t=0; str1[0]='$'; while(str[i]!='\0') { str1[k++]=t?str[i++]:'#'; t^=1; } str1[k++]='#'; str1[k]='\0'; n=k; } int main() { while(scanf("%s",str)==1) { pre(); Manacher(); int maxx=0; for(int i=0;i<n;i++) if(maxx<nxt[i]-1) maxx=nxt[i]-1; printf("%d\n",maxx); } return 0; }
- 1
信息
- ID
- 3577
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者