萌新刚学OI,30pts请求DEBUG
查看原帖
萌新刚学OI,30pts请求DEBUG
922691
Hisy楼主2024/8/13 20:42
#include<bits/stdc++.h>
#define MAXN 1000001
using namespace std;
char s1[MAXN],s2[MAXN];
int nxt[MAXN];
int main(){
	scanf("%s %s",s1+1,s2+1);
	int len1=strlen(s1+1);
	int len2=strlen(s2+1);
	while(!isupper(s1[len1])){
	    s1[len1]='\0';
	    --len1;
	}
	while(!isupper(s2[len2])){
	    s2[len2]='\0';
	    --len2;
	}
	int pos=0;
	for(int i=2;i<=len2;++i){
		while(pos&&s2[i]!=s2[pos+1]){
		}
		pos=nxt[pos];
		if(s2[i]==s2[pos+1]){
			++pos;
		}
		nxt[i]=pos;		
	}
	pos=0;
	for(int i=1;i<=len1;++i){
		while(pos&&s1[i]!=s2[pos+1]){
			pos=nxt[pos];
		}
		if(s1[i]==s2[pos+1]){
			++pos;
		}
		if(pos==len2){
			printf("%d\n",i-len2+1);
		}
	}
	for(int i=1;i<=len2;++i){
		printf("%d ",nxt[i]);
	}
	return 0;
}
2024/8/13 20:42
加载中...