luogu 3375 KMP两串
注意输入scanf("%s",a+1),scanf("%s",b+1);,int n=strlen(a+1),m=strlen(b+1);
#includeusing namespace std;const int N=1005000;namespace zjc{ char a[N],b[N]; int p[N],j; void work(){ scanf("%s",a+1);scanf("%s",b+1); int n=strlen(a+1),m=strlen(b+1); p[1]=0; j=0; for(int i=1;i 0&&b[j+1]!=b[i+1]) j=p[j]; if(b[j+1]==b[i+1]) ++j; p[i+1]=j; } j=0; for(int i=0;i 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-m+1); j=p[j];} } for(int i=1;i<=m;i++) printf("%d ",p[i]); }}int main(){ zjc::work(); return 0;}