救救孩子,为了调这个题,3h没喝水了!
查看原帖
救救孩子,为了调这个题,3h没喝水了!
132976
huayucaiji楼主2021/1/27 21:11

rt,大佬能帮忙康一下为什么错吗/kel

#include<bits/stdc++.h>
using namespace std;

const int maxn=1e6+10;

int n,nxt[maxn],m,p[maxn];
string a,b;
char stk[maxn];

signed main() {
	cin>>a>>b;
	n=a.size();
	m=b.size();
	
	nxt[0]=0;
	for(int i=1,j=0;i<m;i++) {
		while(j&&b[j]!=b[i]) {
			j=nxt[j];
		}
		if(b[j]==b[i]) {
			j++;
		}
		nxt[i]=j;
	}

	int cnt=-1;
	for(int i=0,j=0;i<n;i++) {
		stk[++cnt]=a[i];
		while(j&&a[i]!=b[j]) {
			j=nxt[j];
		}
		if(a[i]==b[j]) {
			j++;
		}
		p[i]=j;
		if(j==m) {
			cnt-=m;
			j=p[cnt];
		}
	}
	n=cnt;
	
	for(int i=0;i<=n;i++) {
		cout<<stk[i];
	}
	return 0;
}

2021/1/27 21:11
加载中...