1686 hdu Oulipo(求模式串在文本串中出现的次数)

来源:互联网 发布:手机淘宝开店要不要钱 编辑:程序博客网 时间:2024/06/13 09:21

代码:

#include<cstdio>#include<cstring>using namespace std;char a[1000005],b[10005];int next[10005];int LCPS[10005];int n,m;void GetLCPS(){    int j=0;    int k=-1;    int len=strlen(b);    next[0]=-1;    while(j<len)    {        if(k==-1||b[k]==b[j])        {            LCPS[j++]=++k;            next[j]=k;        }        else        {            if(k-1>=0)                k=LCPS[k-1];            else                k=-1;        }    }}void KMP(){    int i=0;    int j=0;    int flag=i;    int ans=0;    int a_len=strlen(a);    int b_len=strlen(b);    while(i<a_len)    {        if(j==-1||a[i]==b[j])        {            i++;            j++;        }        else        {            j=next[j];        }        if(j==b_len)        {            j=next[j];            ans++;        }    }    printf("%d\n",ans);}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%s",b);        scanf("%s",a);        GetLCPS();        KMP();    }    return 0;}


0 0
原创粉丝点击