一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
abcde a3 aaaaaa aa #
0
3
一开始疏忽用的next,与algorithm里的函数重名了,后来改成了nextt就过了。
AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[1005],b[1005];
int len1,len2;
int nextt[1005];
void get_next()
{
int i=1,j=0;
nextt[1]=0;
while(i<len1)
{
if(j==0||b[i]==b[i])
{
++j;
++i;
nextt[i]=j;
}
else
nextt[j]=j;
}
}
int kmp()
{
int i=1,j=1,ans=0;
while(i<=len1)
{
if(j==0||a[i]==b[j])
{
++i;
++j;
}
else
j=nextt[j];
if(j>len2)
{
ans++;
j=1;
}
}
return ans;
}
int main()
{
char str1[1005],str2[1005];
while(scanf("%s",a+1))
{
if(a[1]=='#')
return 0;
scanf("%s",b+1);
len1=strlen(a+1);
len2=strlen(b+1);
get_next();
int sum=0;
sum=kmp();
printf("%d\n",sum);
}
return 0;
}