P1723求调教
  • 板块题目总版
  • 楼主Clarinet
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/29 21:40
  • 上次更新2023/11/30 10:43:46
查看原帖
P1723求调教
564935
Clarinet楼主2023/11/29 21:40

马拉车,感觉对但过不去

#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:40
加载中...