提交时间:2022-02-23 13:55:44

运行 ID: 45727

#include <bits/stdc++.h> using namespace std; inline int read(int x=0,bool f=1){ char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=0;c=getchar();} while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();} return f?x:-x; } char s[1000005],t[1000005]; int n[1000005],x,y; void Init(){ for(int i=2,j=0;i<=y;i++){ while(j&&t[j+1]!=t[i]) j=n[j]; j+=(t[j+1]==t[i]); n[i]=j; } } void Kmp(){ for(int i=1,j=0;i<=x;i++){ while(j&&s[i]!=t[j+1]) j=n[j]; j+=(s[i]==t[j+1]); if(j==y) printf("%d\n",i-y+1),j=n[j]; } } int main(){ cin>>(s+1)>>(t+1); x=strlen(s+1),y=strlen(t+1); Init(); Kmp(); for(int i=1;i<=y;i++) printf("%d ",n[i]); return 0; }