77分球条
查看原帖
77分球条
602932
NumberTrart楼主2025/1/17 11:27
aha

在本地用O2编译运行测试输出的是2而评测机说回答的是4

#include<iostream>
using namespace std;
const int N=2e5+10;
int p,mx;
int n;
char str[N],tmp;
int ans;
int r[N];
int ll[N],rr[N];
int main()
{
	freopen("C:\\Users\\dell\\Downloads\\P4555_12.in","r",stdin);
	str[n++]='$';
	str[n++]='#';
	tmp=getchar();
	while(tmp!=' '&&tmp!='\n'&&tmp!=EOF)
	{
		str[n++]=tmp;
		str[n++]='#';
		tmp=getchar();
	}
	str[n++]='~';
	//cout<<str<<'\n';
	for(int i=1;i<n;i++)
	{
		r[i]=1;
		if(mx>i) r[i]=min(r[2*p-i],mx-i+1);
		while(str[i+r[i]]==str[i-r[i]]) r[i]++;
		if(i+r[i]-1>mx)
		{
			p=i;
			mx=i+r[i]-1;
		}
		//cout<<"i="<<i<<" ri="<<r[i]<<'\n';
		ll[i+r[i]-1]=max(ll[i+r[i]-1],r[i]-1);
		rr[i-r[i]+1]=max(rr[i-r[i]+1],r[i]-1);
		/*cout<<"ll["<<i+r[i]-1<<"]="<<r[i]-1<<'\n';
		cout<<str<<'\n';
		for(int j=0;j<i+r[i]-1;j++) cout<<' ';
		cout<<"^\n";
		cout<<"rr["<<i-r[i]+1<<"]="<<r[i]-1<<'\n';
		cout<<str<<'\n';
		for(int j=0;j<i-r[i]+1;j++) cout<<' ';
		cout<<"^\n";*/
	}
	for(int i=2;i<=n;i++) rr[i]=max(rr[i],rr[i-2]-2);
	for(int i=n;i>=2;i--) ll[i]=max(ll[i],ll[i+2]-2);
	for(int i=2;i<=n-3;i++)
		if(str[i]=='#'&&ll[i]>=1&&rr[i]>=1)
		//{
			ans=max(ans,ll[i]+rr[i]);
			/*cout<<"i="<<i<<" ll[i]="<<ll[i]<<" rr[i]="<<rr[i]<<'\n';
			cout<<str<<'\n';
			for(int j=0;j<i;j++) cout<<' ';
			cout<<"^\n";*/
		//}
		//else if(str[i]=='#')cout<<"i="<<i<<" ll[i]="<<ll[i]<<" rr[i]="<<rr[i]<<'\n';
	cout<<ans<<'\n';
	return 0;
}
2025/1/17 11:27
加载中...