#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
string s1,s2;
int n,m,kmp[1000005];
int main(){
getline(cin,s1);
getline(cin,s2);
n=s1.size(); m=s2.size();
kmp[0]=kmp[1]=0;
int k=0;
for (int i=1; i<m; i++){
while (k && s2[i]!=s2[k]) k=kmp[k];
kmp[i+1]=a2[i]==a2[k]?++k:0;
}
k=0;
for (int i=0; i<n; i++){
while (k && s1[i]!=s2[k]) k=kmp[k];
k+=s1[i]==s2[k];
if (k==m) printf("%d\n",i-m+2);
}
for (int i=1; i<=m; i++) printf("%d ",kmp[i]);
}
为什么把getline改成cin就对了啊
P3375