70分求助
查看原帖
70分求助
516508
windfall_waterfall楼主2022/6/28 18:25

最后一个组最后两个测试点WA了。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
string s,t;
int nxt[100000000],cnt=0,w[100000000];
void kmp_next(){
	int j=0;
	for(int i=1 ; i<t.size() ; i++){
		while(j>0 && t[i]!=t[j]) j=nxt[j-1];
		if(t[i]==t[j]) j++;
		nxt[i]=j;
	}
}
void kmp(){
	int j=0;
	for(int i=0 ; i<s.size() ; i++){
		if(j>0 && s[i]!=t[j]) j=nxt[j-1];
		if(s[i]==t[j]) j++;
		if(j==t.size()){
			w[cnt]=i-t.size()+1;
			cnt++;
		}
	}
}
int main() {
    cin>>s>>t;
    kmp_next();
    kmp();
    for(int i=0 ; i<cnt ; i++){
    	cout<<w[i]+1<<endl;
    }
    for(int i=0 ; i<t.size() ; i++){
    	cout<<nxt[i]<<" ";
    }
    return 0;
}
2022/6/28 18:25
加载中...