0分求解
查看原帖
0分求解
564935
Clarinet楼主2023/11/29 21:26

救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救救

#include<bits/stdc++.h>
using namespace std;
int p[22000010],t;
char a[22000010],c;
int main(){
	cin>>t;
	c=getchar();
	while(t--){
		int mx=0,mid=0,n=0,ans=0;
		memset(p,0,sizeof(p));
		a[0]='#';
		c=getchar();
		while(c>='a'&&c<='z'){
			a[++n]=c;
			a[++n]='#';
			c=getchar();
		}
		for(int i=0;i<n;i++){
			p[i]=(i<mx) ? min(p[mid*2-i],mx-i) : 1;
			while(i+p[i]<=n&&i-p[i]>=0&&a[i+p[i]]==a[i-p[i]])p[i]++;
			if(i+p[i]>mx){
				mx=i+p[i];
				mid=i;
			}
			ans=max(ans,p[i]);
		}
		cout<<ans-1<<endl;
	}
	return 0;
}
2023/11/29 21:26
加载中...