Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
45727 | seanlsy | 【模拟赛3】JF 和 HJJ 是什么关系 | C++ | 通过 | 100 | 46 MS | 3200 KB | 724 | 2022-02-23 13:55:44 |
#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; }