zoukankan      html  css  js  c++  java
  • Hrbust-2060 截取方案数(KMP)

    给定一个模式串T,主串S,问:从S中截取T有多少种方案?

    Input
    有多组测试数据,对于每组测试数据,第一行是模式串T,第二行是主串S,数据中仅包含大小写字母和数字,模式串T长度不超过10^4, 主串S长度不超过10^5。

    注意:数据是随机的。

    Output
    对于每组测试数据,输出一行,为截取方案数。

    Sample Input
    abc
    abcdaabcab
    abcd
    abcdaabcab
    aba
    abababa
    Sample Output
    2
    1
    3

    直接套KMP模板记录子串数量即可。
    代码如下:

    #include<stdio.h>
    #include<string.h>
    char t[10008],s[100008];
    int next[10008];
    void kmp_pre(int len)
    {
        int i,j;
        j=next[0]=-1;
        i=0;
        while(i<len)
        {
            while(-1!=j && t[i]!=t[j])j=next[j];
            next[++i]=++j;
        }
    }
    int kmpcount(int lent,int lens)
    {
        int i,j;
        int ans=0;
        i=j=0;
        while(i<lens)
        {
            while(-1!=j&&s[i]!=t[j])j=next[j];
            i++;j++;
            if(j>=lent)
            {
                ans++;
                j=next[j];
            }
        }
        return ans;
    }
    int main()
    {
        while(scanf("%s",t)!=EOF)
        {
            int lent=strlen(t);
            kmp_pre(lent);
            scanf("%s",s);
            int lens=strlen(s);
            printf("%d
    ",kmpcount(lent,lens));
        }
    }
    
  • 相关阅读:
    一种复杂的情感--“外戚”
    追~
    神受的孩子
    不好的习惯
    思杨改编的朝代歌
    siyang入厕
    小思趣事
    今天周三啦~~时光啊
    Python(6)——装饰器
    Python(5)——关于描述符的三种操作方法
  • 原文地址:https://www.cnblogs.com/kuronekonano/p/11135851.html
Copyright © 2011-2022 走看看