剪花布条

来源:互联网 发布:淘宝平面模特应聘 编辑:程序博客网 时间:2024/05/17 04:59


一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。 
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。 
Sample Input
abcde a3aaaaaa  aa#
Sample Output
03
#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;}



原创粉丝点击