一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
abcde a3 aaaaaa aa #
0 3
#include<cstdio>
#include<cstring>
char a[1005],b[1005];
int next[1005];
void makenext(char *b,int m)
{
next[0]=0;
int k=0;
for(int i=1;i<m;i++)
{
while(k>0&&b[k]!=b[i])
k=next[k-1];
if(b[i]==b[k])
k++;
next[i]=k;
}
}
int kmp(char *a,int n,char *b,int m,int sum)
{
int k=0,i;
for(i=0;i<n;i++)
{
while(k>0&&a[i]!=b[k])
k=next[k-1];
if(b[k]==a[i])
k++;
if(k==m)
{
sum+=1;
k=0;
}
}
if(i=n)
return sum;
}
int main()
{
int i,j,l1,l2,t,sum=0;
while(scanf("%s%s",a,b)!=EOF)
{
if(a[0]=='#')
break;
l1=strlen(a);
l2=strlen(b);
makenext(b,l2);
t=kmp(a,l1,b,l2,sum);
printf("%d\n",t);
}
return 0;
}