RE求助
查看原帖
RE求助
443754
Sender_T楼主2023/10/18 16:19

rt,本地编译通过但洛谷RE

#include<iostream>
#include<cstring>
using namespace std;
const int MAXN = 1e7;
char s[MAXN],p[MAXN];
int next[MAXN];
void init(){
    next[1]=0;
	int len=strlen(p); 
	int i=2,j=0;
	while(i<=len){
		if(p[i-1]==p[j]) next[i++]=++j;
		else if(i==2||!j){
			next[i++]=j;
			continue;
		}else j=next[j];
	}
}
void kmp(){
	int len=strlen(s);
	for(int i=0,j=0;i<len;i++){
		while(s[i]!=p[j]&&j) j=next[j+1];
		if(s[i]==p[j]) ++j;
		if(j==strlen(p)) printf("%d\n",i-j+2),j=next[j];
	}
}
int main(){
	scanf("%s%s",&s,&p);
	init();
	kmp();
	for(int i=1;i<=strlen(p);i++) printf("%d ",next[i]);
	return 0;
}
2023/10/18 16:19
加载中...