一只蒟蒻写的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;
}