RE70分求助
查看原帖
RE70分求助
418419
ko_no_lzx_da楼主2022/1/1 16:00
#include<bits/stdc++.h>
using namespace std;
char s[600001],t[600001];
long long fail[600001];
int main(){
	scanf("%s%s",s+1,t+1);
	long long n=strlen(s+1),m=strlen(t+1);
	fail[1]=0;
	for(long long i=2;i<=m;++i){
		long long j=fail[i-1];
		while(t[i]!=t[j+1]&&j)j=fail[j];
		if(t[i]==t[j+1])j++;
		fail[i]=j;
	}
	long long p=0;
	for(long long i=1;i<=n;++i){
		while(s[i]!=t[p+1]&&p)p=fail[p];
		if(s[i]=t[p+1])p++;
		if(p==m){
			printf("%d\n",i-m+1);
			p=fail[p];
		}
	}
	for(long long i=1;i<=m;++i)printf("%d ",fail[i]);
    return 0;
}
2022/1/1 16:00
加载中...