70分求调
查看原帖
70分求调
547787
__Refine__楼主2023/10/15 11:38
#include<bits/stdc++.h>

using namespace std;

char a[1000011],b[1000011];
int a1,b1;
int p[1000011];
void pre()
{
	int j=0;
	for(int i=1;i<b1;i++)
	{
		while(b[j+1]!=b[i+1]&&j>0) j=p[j];
		if(b[j+1]==b[i+1])
		{
			j++;
		}
		p[i+1]=j;
	}
}
int main()
{
	cin>>a+1>>b+1;
	a1=strlen(a+1);
	b1=strlen(b+1);
	pre();
	int j=0;
	for(int i=0;i<a1;i++)
	{
		while(j>0&&a[i+1]!=b[j+1]) j=p[j];
		if(a[i+1]==b[j+1])
		{
			j++;
		}
		if(j==b1)
		{
			cout<<i-b1+2<<endl;
			j=p[j];
		}
	}
	for(int i=1;i<=b1;i++)
	{
		cout<<p[i]<<" ";
	}
	return 0;
 } 

测第八个点时a1会莫名小很多,怎么改都不行

2023/10/15 11:38
加载中...