35分,WA1andTLE,已解决(for me)
查看原帖
35分,WA1andTLE,已解决(for me)
612748
wwyyyy楼主2023/8/12 20:42
void test()
{
    string s, t;
    cin >> t >> s;
    ll slen = s.length(), tlen = t.length();
    vector<ll> z(slen, 0), p(tlen, 0);
    ll resz = 0, rest = 0;
    z[0] = slen;
    resz ^= 1 * (z[0] + 1);
    for (ll i = 1, l, r = 0; i < slen; ++i)
    {
        if (i <= r)
            z[i] = min(r - i + 1, z[i - l]);
        while (i + z[i] < slen && s[z[i]] == s[i + z[i]])
            z[i]++;
        if (r < i + z[i] - 1)
            l = i, r = i + z[i] - 1;
        resz ^= (i + 1) * (z[i] + 1);
    }
    for (ll i = 0, l, r = -1; i < tlen; ++i)
    {
        if (i <= r)
            p[i] = min(r - i + 1, p[i - l]);
        while (p[i] < slen && i + p[i] < tlen && t[i + p[i]] == s[p[i]])
            p[i]++;
        if (r < i + p[i] - 1)
            l = i, r = i + p[i] - 1;
        rest ^= (i + 1) * (p[i] + 1);
    }
    cout << resz << endl
         << rest << endl;
}
2023/8/12 20:42
加载中...