我的exkmp出锅了
查看原帖
我的exkmp出锅了
534597
__PRO__楼主2023/12/31 11:24

又T又WA又RE,求助 dalao: 寄录

#include <cstring>
#include <iostream>
using namespace std;
int z[2000010];

void exkmp(string s, string p)
{
    int n = s.size();
    int m = p.size();
    memset(z, 0, sizeof(z));
    while (z[0] < m && z[0] < n && s[z[0]] == p[z[0]])
        ++z[0];
    int l, r = 0;
    for (int i = 1; i < m; ++i) {
        if (i <= r)
            z[i] = min(z[i - l + 1], r - i + 1);
        while (i + z[i] < m && z[i] + 1 < n && p[i + z[i]] == s[z[i] + 1])
            ++z[i];
        if (r < i + z[i] - 1) {
            r = i + z[i] - 1;
            l = i;
        }
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    string s, p;
    cin >> s >> p;
    exkmp(p, p);
    long long ans = 0;
    for (int i = 0; i < p.size(); ++i)
        ans ^= 1ll * (i + 1) * (z[i] + 1);
    cout << ans << '\n';
    ans = 0;
    exkmp(p, s);
    for (int i = 0; i < s.size(); ++i)
        ans ^= 1ll * (i + 1) * (z[i] + 1);
    cout << ans;
    return 0;
}
2023/12/31 11:24
加载中...