萌新刚学OI,全部TLE求助
查看原帖
萌新刚学OI,全部TLE求助
286448
Eason2009楼主2022/6/23 10:44
#include<bits/stdc++.h>
using namespace std;
#define maxn 30000005
char s[maxn],t[maxn];
int ans,f[maxn],len;
int manacher()
{
	int mid=1,r=1;
	for(int i=1;i<len;i++)
	{
		if(i<r)
		{
			f[i]=min(r-i,f[mid*2-i]);
		}
		else f[i]=1;
		while(t[i-f[i]]==t[i+f[i]]) f[i]++;
		if(i+f[i]>r)
		{
			r=i+f[i];
			mid=i;
		}
		ans=max(ans,f[i]-1);
		//cout<<f[i]-1<<endl;
	}
	return ans;
}
int main()
{
	scanf("%s",s);
	len=2;
	t[0]='&';
	t[1]='€';
	for(int i=0;i<strlen(s);i++)
	{
		t[len++]=s[i];
		t[len++]='€';
	}
	t[len]='$';
	cout<<manacher();
	return 0;
}

感觉我manacher部分写的没有问题啊,那到底是什么原因呢

2022/6/23 10:44
加载中...