#include <stdio.h> #include <string.h> const int maxn=2000; int f[maxn],p[maxn]; void getfail(char *s){ f[0]=0; f[1]=0; int len=strlen(s); for(int i=1;i<len;i++) { int j=f[i]; while(j&&p[j]!=p[i]) j=f[j]; f[i+1]=p[i]==p[j]?j+1:0; } } int ans=0; void find(char *p,char *t){ int j=0; int n=strlen(p),m=strlen(t); getfail(p); for(int i=0;i<m;i++) { while(j&p[j]!=t[i]) j=f[j]; if(p[j]==t[i]) j++; if(j==n){ j=0; ans++; } } } int main(){ char t[1000],p[1000]; while(scanf("%s",t)==1){ if(t[0]=='#') break; if(scanf("%s",p)){ ans=0; find(p,t); printf("%d\n",ans); } } return 0; }
hdu2087
最新推荐文章于 2020-05-06 00:06:21 发布