社区讨论
66分TLE求调
P3805【模板】Manacher参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mkntx1te
- 此快照首次捕获于
- 2026/01/21 17:37 4 周前
- 此快照最后确认于
- 2026/02/11 02:29 上周
CPP
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string s;
int d1[11000005], d2[11000005], ans = 1;
int main()
{
cin >> s;
int n = s.size();
for (int i = 0, l = 0, r = -1; i < n; i++)
{
int k;
if (i > r) k = 1;
else k = min(d1[l + r - i], r - i + 1);
while (0 <= i - k && i + k < n && s[i - k] == s[i + k]) k++;
d1[i] = k--;
if (i + k > r && l <= r)
{
l = i - k;
r = l + k;
}
ans = max(ans, k * 2 + 1);
}
for (int i = 0, l = 0, r = -1; i < n; i++)
{
int k;
if (i > r) k = 0;
else k = min(d2[l + r - i], r - i + 1);
while (0 <= i - k - 1 && i + k < n && s[i - k - 1] == s[i + k]) k++;
d2[i] = k--;
if (i + k > r && l < r && k != -1)
{
l = i - k - 1;
r = l + k;
}
ans = max(ans, k * 2 + 2);
}
cout << ans;
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...