KMP Subtask WA 求助
查看原帖
KMP Subtask WA 求助
822239
ncwzdlsd楼主2023/3/25 17:40

rt。没有 TLE,但是 Subtask 挂了……

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

const int maxn=1e6+5;
char ss[205][maxn],nxt[maxn];

void pre(char *b)
{
	memset(nxt,0,sizeof(nxt));
	int m=strlen(b+1);
	for(int i=1,j=0;i<=m;i++)
	{
		while(j&&b[i+1]!=b[j+1]) j=nxt[j];
		if(b[i+1]==b[j+1]) j++;
		nxt[i+1]=j;
	}
}

int kmp(char *b,char *a)
{
	int m=strlen(b+1),n=strlen(a+1),cnt=0;
	for(int i=0,j=0;i<=n;i++)
	{
		while(j&&a[i+1]!=b[j+1]) j=nxt[j];
		if(a[i+1]==b[j+1]) j++;
		if(j==m) cnt++,j=nxt[j];
	}
	return cnt;
}

signed main()
{
	int N;cin>>N;
	for(int i=1;i<=N;i++) cin>>ss[i]+1;
	for(int i=1;i<=N;i++)
	{
		int ans=0;
		pre(ss[i]);
		for(int j=1;j<=N;j++) 
			ans+=kmp(ss[i],ss[j]);
		cout<<ans<<endl;
	}
	return 0;
}
2023/3/25 17:40
加载中...