ptaL2-008manachar做法

之前考虑过如果输入样例很大怎么办,但是没有细想,今天看了看manachar,懊悔如果这个题样例增大一些变成L3 30分就好了hh,相比于洛谷上的模板题,这个题唯一不一样的就是有空格,所以不能再用char数组来保存,改用string来存储,C++中的getline 函数前几天刚了解到正好也派上用场了



const int N=1e6+10;
int t;
string s;
string ss;
int ans,len;
int d[N];
int cnt;
void init()
{
	len=s.length();
	cnt=1;
	ss+='@';
	ss+='&';
	for(int i=0;i<len;i++)
	{
		ss+=s[i];
		ss+='&';
	}
}
void manachar()
{
	d[1]=1;
	for(int i=2,r=1,l;i<=ss.length();i++)
	{
		if(i<=r) d[i]=min(d[r-i+l],r-i+1);
		while(ss[i-d[i]]==ss[i+d[i]]) d[i]++;
		if(r<=i+d[i]-1) r=i+d[i]-1,l=i-d[i]+1;
		ans=max(ans,d[i]-1);
	}
}
void solve()
{
	getline(cin,s);
	init();
	manachar();
	cout<<ans;
	return;
}
int main()
{
	solve();
	return 0;
}
`
posted on 2024-03-20 18:22  如果有缘我们会再见  阅读(8)  评论(0)    收藏  举报