manacher玄学52求助
查看原帖
manacher玄学52求助
227728
冰糖鸽子TJ鸽子协会楼主2021/1/25 14:42

RT,WA了1,2,3和9,10,11


// Problem: P3805 【模板】manacher算法
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3805
// Memory Limit: 512 MB
// Time Limit: 500 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#include <bits/stdc++.h>
using namespace std;
#define M 11000005
string t,s="";
int mid,mr,f[2*M];
int manacher()
{
	f[0]=1;
	int ans=0;
	for(int i=1;i<s.length();i++)
	{
		f[i]=min(((i<mr)?f[mid*2-i]:0),int(s.length())-i-1);
		while(i+f[i]+1<s.length()&&i-1-f[i]>=0&&s[i+1+f[i]]==s[i-1-f[i]]) 
		{
			f[i]++;
		}
		if(i+f[i]-1>mr)
		{
			mr=i+f[i];
			mid=i;
		}
		if(s[i]=='#')
		{
			ans=max(ans,(f[i]+1)/2*2);
		}
		else
		{
			ans=max(ans,(f[i]/2)*2+1);
		}
	}
	return ans;
}
int main()
{
	cin>>t;
	for(int i=0;i<t.length();i++){s+=t[i];s+="#";}
	cout<<manacher();
	return 0;
}
2021/1/25 14:42
加载中...