Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
45778 | xujindong | 【模拟赛3】JF 和 HJJ 是什么关系 | C++ | 解答错误 | 28 | 2 MS | 4148 KB | 577 | 2022-02-24 12:40:55 |
#include <bits/stdc++.h> using namespace std; int n,m,nxt[1000005]; char s[1000005],t[1000005]; void KMP(int m,char *t) { nxt[1]=0; for(int i=2,j=0; i<=m; i++) { while(j>0&& t[i]!=t[j+1])j=nxt[j]; if(t[i]==t[j+1])j++; nxt[i]=j; } for(int i=1,j=0; i<=n; i++) { for(; j>0&& t[j+1]!=s[i]; j=nxt[j]); if(t[j+1]==s[i])j++; if(j==m)cout<<i-m+1<<'\n'; } } int main() { cin>>s+1>>t+1; n=strlen(s+1),m=strlen(t+1); if(n<m)swap(s,t); KMP(m,t); for(int i=1; i<=m; i++)cout<<nxt[i]<<(i==m?'\n':' '); return 0; }