WA70分
查看原帖
WA70分
243263
夜阑楼主2022/3/20 10:53

样例没过,WA70分。。。

#include<bits/stdc++.h>
using namespace std;
int p[100010],n,m;
char s[100010],t[100010];
void pre(){
	p[1]=0;
	int j=0;
	for(int i=1;i<m;i++){
		while(j>0&&t[i+1]!=t[j+1]){
			j=p[j];
		}
		if(t[i+1]==t[j+1])j++;
		p[i+1]=j;
	}
}
void kmp(){
	int j=0;
	for(int i=1;i<n;i++){
		while(j>0&&s[i+1]!=t[j+1])j=p[j];
		if(s[i+1]==t[j+1])j++;
		if(j==m){
			cout<<i+1-j+1<<endl;
			j=p[j];
		}
	}
}
int main(){
	cin>>s+1>>t+1;
	n=strlen(s+1);
	m=strlen(t+1);
	pre();
	kmp();
	for(int i=1;i<=m;i++){
		cout<<p[i]<<' ';
	}
	return 0;
}
2022/3/20 10:53
加载中...