社区讨论

引以为戒希望大家别像我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
C
namespace 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 条回复,欢迎继续交流。

正在加载回复...