zoukankan      html  css  js  c++  java
  • 【hdu1686】Oulipo——KMP

    题目链接

    题目的意思也很好理解。就是给你n对字符串,求每对中第一串在第二串中出现的次数。

    直接N次KMP即可。

    要记熟next的计算过程和kmp的匹配过程!

    具体细节看代码:

    #include<cstdio>
    #include<cstring>
    const int M=1e6+10;
    using namespace std;
    int next[M],len,len1;
    char b[M],c[M];
    void makenext()
    {
        memset(next,0,sizeof(next));
        for(int i=2,j=0;i<=len;i++)
        {
            while(j&&b[i]!=b[j+1])j=next[j];
            if(b[j+1]==b[i])j++;
            next[i]=j;
        }
    }
    int kmp()
    {
        int sum=0;
        for(int i=1,j=0;i<=len1;i++){
            while(j&&c[i]!=b[j+1])j=next[j];
            if(c[i]==b[j+1])j++;
            if(j==len)sum++;
        }
        return sum;
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s",b+1);
            scanf("%s",c+1);
            len=strlen(b+1);
            len1=strlen(c+1);
            makenext();
            printf("%d
    ",kmp());
        }
        return 0;
    }
    hdu1686
  • 相关阅读:
    软工人日常
    11.5
    11.4
    11.3
    11.2阅读笔记
    11.1阅读笔记
    10.31 异常
    10.30动手动脑
    10.29
    10.28
  • 原文地址:https://www.cnblogs.com/JKAI/p/7274450.html
Copyright © 2011-2022 走看看