提交时间:2022-02-25 12:51:52

运行 ID: 45879

#include <bits/stdc++.h> using namespace std; char a[10000000],b[10000000]; int p[11000000]; int main() { scanf("%s%s",a+1,b+1); int i,j=0; p[1]=0; int n=strlen(a+1),m=strlen(b+1); for(int i=1; i<m; ++i) { while(j>0&&b[j+1]!=b[i+1])j=p[j]; if(b[i+1]==b[j+1])j++; p[i+1]=j; } j=0; for(i=0; i<n; ++i) { while(j>0&&b[j+1]!=a[i+1])j=p[j]; if(b[j+1]==a[i+1])++j; if(j==m) { printf("%d\n",i+1-strlen(b+1)+1); j=p[j]; } } for(int i=1; i<=m; ++i)printf("%d ",p[i]); return 0; }