hdu2087

来源:互联网 发布:linux 进程启动时间 编辑:程序博客网 时间:2024/05/16 16:08
#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;}
3 0