现在将串1重复b次,将串2重复d次,然后问串1能够匹配多少个串2、
思路:
设定Dp【i】表示我们串2以位子i作为起点,匹配了一整个串1之后,能够匹配成功多少个串2.Nex【i】表示在匹配之后,串2需要继续匹配的位子。
那么我们重复b次,Ans+=Dp【now】,now=nex【now】即可。
Ac代码:
#include<stdio.h>
#include<string.h>
using namespace std;
char a[150];
char b[150];
int dp[150];
int nex[150];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
scanf("%s%s",a,b);
int lena=strlen(a);
int lenb=strlen(b);
memset(dp,0,sizeof(dp));
memset(nex,0,sizeof(nex));
for(int i=0;i<lenb;i++)
{
int now=i;
for(int j=0;j<lena;j++)
{
if(a[j]==b[now])
{
now++;
}
if(now==lenb)dp[i]++,now=0;
}
nex[i]=now;
}
int ans=0;
int now=0;
for(int i=0;i<n;i++)
{
ans+=dp[now];
now=nex[now];
}
printf("%d\n",ans/m);
}
}