为何写挂了
  • 板块灌水区
  • 楼主hkl99
  • 当前回复1
  • 已保存回复2
  • 发布时间2024/11/30 18:16
  • 上次更新2024/11/30 18:39:21
查看原帖
为何写挂了
770439
hkl99楼主2024/11/30 18:16

题目

为啥70分

代码:

#include<bits/stdc++.h>
using namespace std; 
int n,m,nxt[2100001],f[2100001];
char s[2100002],p[2100002];
inline void kmp(){
	n=strlen(s+1);
	m=strlen(p+1);
	int j=0;
	nxt[1]=0;
	for(int i=2;i<=m;i++){
		while(j&&p[i]!=p[j+1]){
			j=nxt[j];
		}
		if(p[i]==p[j+1]){
			++j;
		}
		nxt[i]=j;
	}
	j=0;
	for(int i=1;i<=n;i++){
		if(j==m||(j&&s[i]!=p[j+1])){
			j=nxt[j];
		}
		if(s[i]==p[j+1]){
			++j;
		}
		f[i]=j;
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(f[i]==m){
			printf("%d\n",i-m+1);
		}
	}
	for(int i=1;i<=m;i++){
		printf("%d ",nxt[i]);
	}
}
int main(){
//	freopen("P3375_13.in","r",stdin);
//	freopen("P3375_13.out","w",stdout);
	scanf("%s%s",s+1,p+1);
	kmp();
	return 0;
}

2024/11/30 18:16
加载中...