题目链接:【HDU 2087】
输入两串字符串表示花布和小饰布,问花布可以由多少个小饰布组成
KMP模板的简单应用
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
char s[1010], p[1010];
int f[1010], ls, lp;
void find()
{
memset(f, 0, sizeof(f));
int i=0, j=-1;
f[0]=-1;
while(i<lp)
{
if(j==-1 || p[i]==p[j])
{
i++, j++;
f[i] = j;
}
else j = f[j];
}
}
int main()
{
while(~scanf("%s", s))
{
if(s[0]=='#') break;
scanf("%s", p);
ls = strlen(s), lp = strlen(p);
find();
int i=0, j=0, ans=0;
while(i<ls)
{
if(j==-1||s[i]==p[j])
{
i++, j++;
}
else j = f[j];
if(j==lp) ans++, j=0;
}
printf("%d\n", ans);
}
return 0;
}