社区讨论
引以为戒希望大家别像我CF的G T了一下午
P5410【模板】扩展 KMP / exKMP(Z 函数)参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @locrg50j
- 此快照首次捕获于
- 2023/10/30 18:31 2 年前
- 此快照最后确认于
- 2023/11/05 05:17 2 年前
多组数据
exkmp 那个间接的算法需要加个if不然要t
Cnamespace exKMP
{
inline void Z(char *s, int n, int *z)
{
for (int i = 1; i <= n; i++)
z[i] = 0;
z[1] = n;
for (int i = 2, l = 0, r = 0; i <= n; i++)
{
if (i <= r)
z[i] = min(z[i - l + 1], r - i + 1);
while (i + z[i] <= n && 1 + z[i] <= n && s[i + z[i]] == s[z[i] + 1])
++z[i];
if (i + z[i] - 1 > r)
l = i, r = i + z[i] - 1;
}
}
inline void exkmp(char *s, int n, char *t, int m, int *z, int *p)
{
Z(t, m, z);
for (int i = 1; i <= n; i++)
p[i] = 0;
for (int i = 1, l = 0, r = 0; i <= n; i++)
{
if (i <= r)
p[i] = min(z[i - l + 1], r - i + 1);
while (i + p[i] <= n && 1 + p[i] <= m && s[i + p[i]] == t[p[i] + 1])
++p[i];
if (i + p[i] - 1 > r)
l = i, r = i + p[i] - 1;
}
}
} // namespace exKMP
回复
共 1 条回复,欢迎继续交流。
正在加载回复...