求助短一点的 hack 数据
查看原帖
求助短一点的 hack 数据
449457
IYSY2009I楼主2022/5/21 15:47

RT,只对了 30pts,怀疑自己写了假的 KMP。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s1[1000005],s2[1000005];
int nxt[1000005],ls1,ls2;
int check(int x){
	for(int i=0;i<ls2;i++)
		if(s1[x+i]!=s2[i]) return i;
	return ls2;
}
int main(){
	cin>>s1>>s2;
	ls1=strlen(s1),ls2=strlen(s2);
	nxt[0]=-1;
	for(int i=1;i<ls2;i++){
		int j=nxt[i-1];
		while(s2[j]!=s2[i]&&j!=-1){
			j=nxt[j];
		}
		if(!j) nxt[i]=j+1;
	}
	nxt[0]=0;
	for(int i=0;i<ls1;){
		int j=check(i);
		if(j==ls2) printf("%d\n",i+1);
		if(j) i+=j-nxt[j-1];
		else i++;
	}
	for(int i=0;i<ls2;i++)
		printf("%d ",nxt[i]);
	return 0;
}
2022/5/21 15:47
加载中...