最后一个点WA了
  • 板块题目总版
  • 楼主祠云
  • 当前回复1
  • 已保存回复1
  • 发布时间2018/12/13 22:13
  • 上次更新2024/7/24 12:41:59
查看原帖
最后一个点WA了
106880
祠云楼主2018/12/13 22:13

P4555

#include<bits/stdc++.h>
using namespace std;
char a[100010],b[200010];
int leng[200010],lt[200010],rt[200010];
int main(){
	int mr=0,l,m,ans=0;
	cin>>a;
	l=strlen(a);
	b[0]=b[1]='#';
	for(int i=0;i<l;i++){
		b[i*2+2]=a[i];
		b[i*2+3]='#';
	}
	l=l*2+2;
	b[l]=0;
	for(int i=1;i<l;i++){
		if(i<mr)
			leng[i]=min(leng[m*2-i],leng[m]+m-i);
		else
			leng[i]=1;
		while(b[i+leng[i]]==b[i-leng[i]])
			leng[i]++;
		if(leng[i]+i>mr){
			mr=leng[i]+i;
			m=i;
		}
	}
	int c=0;
	for(int i=0;i<l;i++)
		while(c<=i+leng[i]-1)
			lt[c++]=i;
	c=l;
	for(int i=l-1;i>=0;i--)
		while(c>=i-leng[i]+1)
			rt[c--]=i;
	for(int i=0;i<l;i++)
		ans=max(ans,rt[i]-lt[i]);
	cout<<ans<<endl;
	return 0;
}
2018/12/13 22:13
加载中...