KMP70分求条
查看原帖
KMP70分求条
1125645
DyingEncoder楼主2025/7/24 15:21

太好了,蒟蒻也是KMP70分,求条

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 100;
string a, b;
int nxt[N];
void presolve(string s) {
    nxt[0] = -1;
    int n = (int)(s.size());
    for (int i = 1, j = -1;i < n;i++) {
        while (j >= 0 && s[i] != s[j + 1]) j = nxt[j];
        if (j + 1 < n && s[i] == s[j + 1]) j++;
        nxt[i] = j;
    }
}
void KMP() {
    int n = a.size(), m = b.size();
    for (int i = 0, j = 0;i < n;i++) {
        while (j >= 0 && a[i] != b[j + 1]) j = nxt[j];
        if (j + 1 < m && a[i] == b[j + 1]) j++;
        if (j == m - 1) {
            j = nxt[j];
            cout << i - m + 2 << endl;
        }
    }
}
int main() {
    cin >> a >> b;
    presolve(b);
    KMP();
    int n = b.size();
    for (int i = 0;i < n;i++) {
        cout << nxt[i] + 1 << " ";
    }
    return 0;
}

我也想要(滑稽)

2025/7/24 15:21
加载中...