1 条题解

  • 0
    @ 2023-4-12 10:45:36
    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 2000000;
    int nxt[MAXN + 5];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        string s, t;
        string ans; //t+#+s
        cin >> s >> t;
        //初始化t+"#", s是占位使用的
        ans = t + "#" + s;
        nxt[0] = 0;
        for (int i = 1; i < t.length() + 1; i++)
        {
            int j = nxt[i - 1];
            while (j > 0 && ans[j] != ans[i])
                j = nxt[j - 1];
            if (ans[j] == ans[i])
                j++;
            nxt[i] = j;
        }
        //把s逐个放进来
        int i = 0;              //把s[i]
        int j = t.length() + 1; //放入ans[j]
        while (i < s.length())
        {
            ans[j] = s[i];
            i++;
            int k = nxt[j - 1];
            while (k > 0 && ans[k] != ans[j])
                k = nxt[k - 1];
            if (ans[k] == ans[j])
                k++;
            nxt[j] = k;
            if (nxt[j] < t.length())
                j++;
            else
                j = j - t.length() + 1;
        }
        for (int i = t.length() + 1; i < j; i++)
            cout << ans[i];
        return 0;
    }
    
    • 1

    信息

    ID
    690
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    34
    已通过
    11
    上传者