太好了,蒟蒻也是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;
}
我也想要(滑稽)