Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
46185 | wsad | 【模拟赛3】JF 和 HJJ 是什么关系 | C++ | 通过 | 100 | 46 MS | 3196 KB | 596 | 2022-02-28 12:59:35 |
#include<bits/stdc++.h> using namespace std; const int M=1000010; char s[M],t[M]; int n,m,Next[M]; void GetNext(){ Next[1]=0; for(int i=2,j=0;i<=n;++i) { for(;j>0 && t[i]!=t[j+1];j=Next[j]); if(t[i]==t[j+1]) ++j; Next[i]=j; } return ; } void KMP(){ for(int i=1,j=0;i<=n;++i) { for(;j>0 && s[i]!=t[j+1];j=Next[j]); if(s[i]==t[j+1]) ++j; if(j==m) cout<<i-j+1<<'\n'; } return ; } int main(){ cin>>s+1>>t+1; n=strlen(s+1),m=strlen(t+1); GetNext(),KMP(); for(int i=1;i<m;++i) cout<<Next[i]<<' '; cout<<Next[m]<<'\n'; return 0; }