KMP板子
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
string s, p;
int ne[N];
signed main(){
int n, m;
cin >> n >> p >> m >> s;
p = " " + p; s = " " + s;
for(int i = 2, j = 0; i < p.size(); ++i){
while(j && p[i] != p[j+1]) j = ne[j];
if(p[i] == p[j+1]) ++j;
ne[i] = j;
}
for(int i = 1, j = 0; i < s.size(); ++i){
while(j && s[i] != p[j+1]) j = ne[j];
if(s[i] == p[j+1]) ++j;
if(j == n){
printf("%d ", i - j);
j = ne[j];
}
}
return 0;
}

浙公网安备 33010602011771号