蒟蒻求助,零分...
查看原帖
蒟蒻求助,零分...
303105
haiming楼主2023/10/19 19:14
#include<bits/stdc++.h>
using namespace std;
int n,m,t,i,f[1001000];char a[1001000],b[1001000];
void vs(){
	int n=strlen(b);
	int i=0,j=0;
	while(i<=n){
		if(j==0||b[i-1]==b[j-1])f[++i]=j++;
		else j=f[j];
	}
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	scanf("%s%s",a,b);
	vs();
	n=strlen(a);m=strlen(b);
	t=0;f[1]=1;
	for(i=0;i<n;i++){
		if(a[i]==b[t]){
			t++;if(t==m)printf("%d\n",i-m+2),t=f[t];
		}else t=f[t+1];
	}
	for(i=1;i<=m;i++)printf("%d ",f[i]-1);
	return 0;
}

样例过的,不知道错哪了

2023/10/19 19:14
加载中...