调破防了,栈做法WA#3求助
查看原帖
调破防了,栈做法WA#3求助
820948
qbhswmy楼主2023/7/11 16:28

rt,别的点都过了就#3不过,为了找出错误在哪里我甚至把自己的代码和第一篇题解仔细对了一遍,然后还是寄 code:

#include <bits/stdc++.h>
using namespace std;
char a[1000005],b[1000005];
int stk[1000005]={0},nxt[100005]={0},f[1000005]={0},t=0;
int lena=0,lenb=0;
void fnxt(){
	nxt[1]=0;
	int j=0;
	for(int i=2;i<=lenb;i++){
		while(j>0&&b[i]!=b[j+1])
			j=nxt[j];
		if(b[i]==b[j+1])
			j++;
		nxt[i]=j;
	}
}
int main(){
	cin>>a+1;
	cin>>b+1;
	lena=strlen(a+1);
	lenb=strlen(b+1);
	fnxt();
	int j=0;
	for(int i=1;i<=lena;i++){
		while(j>0&&(a[i]!=b[j+1])) j=nxt[j];
		if(a[i]==b[j+1]) j++;
		f[i]=j;
		stk[++t]=i;
		if(j==lenb){
			t-=lenb;
			j=f[stk[t]];
		}
	}
	for(int i=1;i<=t;i++){
		printf("%c",a[stk[i]]);
	}
	return 0;
} 
2023/7/11 16:28
加载中...