这为什么第三个subtask超时了?
查看原帖
这为什么第三个subtask超时了?
61399
iawe楼主2021/1/22 21:47
#include<cstdio>
#include<cstring>
#define maxn 1000001
using namespace std;
char a[maxn],b[maxn];
int f[maxn],nxt[maxn];
void pre()
{
	int j;
	nxt[1]=j=0;
	for(int i=2,j=0;i<=strlen(b+1);i++)
	{
		while(j&&b[i]!=b[j+1])j=nxt[j];
		if(b[i]==b[j+1])j++;
		nxt[i]=j;
	}
}
void kmp()
{
	for(int i=1,j=0;i<=strlen(a+1);i++)
	{
		while(j&&(j==strlen(b+1)||a[i]!=b[j+1]))j=nxt[j];
		if(a[i]==b[j+1])j++;
		f[i]=j;
		if(f[i]==strlen(b+1))
		{
			printf("%d\n",i-strlen(b+1)+1);
		}
	}
}
int main()
{
	scanf("%s%s",a+1,b+1);
	pre();
	kmp();
	for(int i=1;i<=strlen(b+1);i++)printf("%d ",nxt[i]);
	return 0;
 } 
2021/1/22 21:47
加载中...