急救,连样例都过不去
查看原帖
急救,连样例都过不去
956382
Ravener楼主2024/5/9 22:31
#include<bits/stdc++.h>
#define int long long
using namespace std;
int ans[1000005],net[1000005];
string s,t;
void BuildNext(string s,int next[])
{
	int len=0,i=1;
	while(i<s.length())
		if(s[len]==s[i])
			len++,next[i]=len,i++;
	else
		if(!len)
			i++;
	else
		len=next[len-1];
}
void KmpSearch(string s,string p,int next[],int ans[])
{
	BuildNext(p,next);
	int i=0,j=0,cnt=0;
	while(i<(s.length()))
	{
		if(s[i]==p[i])
			i++,j++;
		else if(j>0)
			j=next[j-1];
		else i++;
		if(j==p.length())
			ans[cnt]=i-j+1,cnt++;
	}
}
signed main()
{
	
	int cnt=0;
	memset(net,0,sizeof(net));
	memset(ans,0,sizeof(ans));
	cin>>s>>t;
	KmpSearch(s,t,net,ans);
	while(ans[cnt])
		cout<<ans[cnt]<<"\n",++cnt;
	cnt=0;
	while(cnt<t.length())
		cout<<net[cnt]<<" ",cnt++;
}

为何我的ans数组只有一个值?
还有 RE 是怎么回事?
(刚学没多久)

2024/5/9 22:31
加载中...