数据过弱
查看原帖
数据过弱
68824
世墨楼主2020/11/6 10:11

KMP写挂依然可以获得满分的好成绩

//wrong code
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define mp make_pair
#define fir first
#define sec second
using namespace std;

inline ll read(){
	ll num=0,neg=1;char c=getchar();
	while(!isdigit(c)){if(c=='-')neg=-1;c=getchar();}
	while(isdigit(c)){num=(num<<3)+(num<<1)+c-'0';c=getchar();}
	return num*neg;
}

char s[1000010],t[1000010];
int nxt[1000010],n,m;

inline void getnxt(){
	nxt[1]=0;
	for(int i=2;i<=m;i++){
		int j=nxt[i-1];
		while(t[j+1]!=t[i]&&j) j=nxt[j];
		if(t[j+1]==t[i]) nxt[i]=j+1;
		else nxt[i]=0;
	}return;
}

inline void KMP(){
	for(int i=1,j=1;i<=n;){
		if(s[i]==t[j]){
			if(j==m){
				printf("%d\n",i-j+1);
				j=nxt[j-1]+1;
			}i++,j++;
		}
		else {
			if(j==1) i++;
			else j=nxt[j-1]+1;
		}
	}
}

signed main(){
	scanf("%s",s+1);scanf("%s",t+1);
	n=strlen(s+1),m=strlen(t+1);
	getnxt();
	KMP();
	for(int i=1;i<=m;i++) printf("%d ",nxt[i]);
	printf("\n");
	return 0;
}

hack

abcdbcd
abcd

在写另一个题的时候出了大问题才发现自己KMP板子是错的,悲

2020/11/6 10:11
加载中...