样例没过,WA70分。。。
#include<bits/stdc++.h>
using namespace std;
int p[100010],n,m;
char s[100010],t[100010];
void pre(){
p[1]=0;
int j=0;
for(int i=1;i<m;i++){
while(j>0&&t[i+1]!=t[j+1]){
j=p[j];
}
if(t[i+1]==t[j+1])j++;
p[i+1]=j;
}
}
void kmp(){
int j=0;
for(int i=1;i<n;i++){
while(j>0&&s[i+1]!=t[j+1])j=p[j];
if(s[i+1]==t[j+1])j++;
if(j==m){
cout<<i+1-j+1<<endl;
j=p[j];
}
}
}
int main(){
cin>>s+1>>t+1;
n=strlen(s+1);
m=strlen(t+1);
pre();
kmp();
for(int i=1;i<=m;i++){
cout<<p[i]<<' ';
}
return 0;
}