P3805求助
  • 板块灌水区
  • 楼主2023gdgz01
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/7 15:22
  • 上次更新2023/11/7 18:12:33
查看原帖
P3805求助
891606
2023gdgz01楼主2023/11/7 15:22

一只蒟蒻写的Manacher,不知何处写挂了,求大佬帮看:

#include <iostream>
#include <string>

using namespace std;

int n, mid = 1, maxn = 1, p[22000005];
string s, t;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	n = t.size();
	s = " .";
	for (register int i = 1; i <= n; ++i)
	{
		s += t[i];
		s += '.';
	}
	s += ' ';
	n = s.size();
	for (register int i = 1; i <= n; ++i)
	{
		if (i < maxn)
		{
			p[i] = min(maxn - i, p[mid * 2 - i]);
		}
		for (; s[i - p[i] - 1] == s[p[i] + i + 1]; ++p[i]);
		if (p[i] + i > maxn)
		{
			mid = i;
			maxn = p[i] + i;
		}
	}
	maxn = 0;
	for (register int i = 1; i <= n; ++i)
	{
	    maxn = max(maxn, p[i]);
	}
	cout << maxn << "\n";
	return 0;
}
2023/11/7 15:22
加载中...