很简单的KMP题
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000+100;
char ch[maxn],ph[maxn];
int fail[maxn];
int n,m;
inline void getFail(){
fail[0]=fail[1]=0;
for(int i=1;i<m;i++){
int j=fail[i];
while(j && ph[i]!=ph[j]) j=fail[j];
fail[i+1]= (ph[i]==ph[j])?j+1:0;
}
}
inline int match(){
int j=0;
int cnt=0;
for(int i=0;i<n;i++){
while(j && ch[i]!=ph[j]) j=fail[j];
if(ch[i]==ph[j]) j++;
if(j==m){
cnt++;
j=0;
}
}
return cnt;
}
int main(){
while(scanf("%s",ch)==1){
if(ch[0]=='#') break;
scanf("%s",ph);
n=strlen(ch);
m=strlen(ph);
getFail();
printf("%d\n",match());
}
}