急!!!虽然样例过但所有测试点全RE!!!
查看原帖
急!!!虽然样例过但所有测试点全RE!!!
520716
True0rFa1se楼主2023/7/25 20:44
#include<iostream>
#include<cstring>
using namespace std;
char s1[1919810],s2[1919810];
int nxt[1919810]={0};
int len,l1;
void build_nxt(){
	int prefix_len=0,i;
	len=strlen(s2)-1;
	for(i=1;i<len;){
		if(s2[prefix_len]==s2[i]){
			++prefix_len;
			nxt[i]=prefix_len;
			++i;
		}else if(prefix_len==0){
			nxt[i]=0;
			++i;
		}else{
			prefix_len=nxt[prefix_len-1];
		}
	}
}
int kmp_search(){
	int i=0,j=0;
	while(i<l1){
		if(s1[i]==s2[j]){
			++i;
			++j;
		}else if(j>0) j=nxt[j-1];
		else ++i;
		if(j==len) cout<<i-j+1<<endl;;
	}
}
int main(){
	ios::sync_with_stdio(0);
	fgets(s1,1000050,stdin);
	fgets(s2,1000050,stdin);
	l1=strlen(s1)-1;
	build_nxt();
	kmp_search();
	for(int i=0;i<len;++i){
		cout<<nxt[i]<<' ';
	}
	return 0;
}
2023/7/25 20:44
加载中...