蒟蒻对于manacher的疑问
查看原帖
蒟蒻对于manacher的疑问
330888
Colala楼主2021/8/21 17:23

我在学习manacher,看到所有的题解都是单独记录了一个maxr,但是我觉得maxr就是p[mid]+mid啊?是不是完全可以不用maxr啊?

附本人不用maxr的代码,发现AC了。

#include<bits/stdc++.h>
using namespace std;
#define MAX 22000010
int p[MAX];
char s[MAX], ss[MAX];

int main()
{
	scanf("%s",ss + 1);
	int n = strlen(ss + 1);
	
	s[0] = '!';s[1] = '#';
	for(int i = 1;i <= n;++i)
	{
		s[i << 1] = ss[i];
		s[i << 1 | 1] = '#';
	}
	s[(n << 1) + 2] = '@';
	n = n << 1 | 1;
		
	int mid = 0, ans = 1;
	for(int i = 1;i <= n;++i)
	{
		if(i < p[mid] + mid) p[i] = min(p[(mid << 1) - i], mid + p[mid] - i);
		else p[i] = 1;
		while(s[i - p[i]] == s[i + p[i]]) ++p[i];
		if(i + p[i] > mid + p[mid]) mid = i;
		if(p[i] > ans) ans = p[i];
	}
	
	printf("%d\n",ans - 1);
	return 0;
}

只是请教一下这个maxr是不是不必要,担心有毒瘤hack数据会把我代码炸掉

2021/8/21 17:23
加载中...