一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
abcde a3 aaaaaa aa #
0 3
#include<cstdio> #include<cstring> #include<algorithm> #define maxn 1100 using namespace std; char a[maxn],b[maxn]; int ne[maxn]; int main() { while(1){ scanf("%s",&a); if(a[0]=='#') break; scanf("%s",&b); int la=strlen(a); int lb=strlen(b); int cnt=0; int k=0; for(int i=0,j=-1;i<=lb;i++,j++){ ne[i]=j; while(j!=-1&&b[i]!=b[j]) j=ne[j]; } for(int i=0,j=0;i<=la;i++,j++){ if(j==lb){ if(i-j+1>k){ cnt++; k=i; } } while(j!=-1&&a[i]!=b[j]) j=ne[j]; } printf("%d\n",cnt); } return 0; }