zoukankan      html  css  js  c++  java
  • 什么kmp直接就find了!!

    You are given two strings s and t

    , both consisting only of lowercase Latin letters.

    The substring s[l..r]
    is the string which is obtained by taking characters sl,sl+1,…,sr

    without changing the order.

    Each of the occurrences of string a
    in a string b is a position i (1≤i≤|b|−|a|+1) such that b[i..i+|a|−1]=a (|a| is the length of string a).

    You are asked q
    queries: for the i-th query you are required to calculate the number of occurrences of string t in a substring s[li..ri]

    The first line contains three integer numbers n, m and q (1≤n,m≤103, 1≤q≤105) — the length of string s, the length of string t

    and the number of queries, respectively.

    The second line is a string s
    (|s|=n

    ), consisting only of lowercase Latin letters.

    The third line is a string t
    (|t|=m

    ), consisting only of lowercase Latin letters.

    Each of the next q
    lines contains two integer numbers li and ri (1≤li≤ri≤n) — the arguments for the i-th query.

    10 3 4
    codeforces
    for
    1 3
    3 10
    5 6
    5 7
    Output
    0
    1
    0
    1
    Input
    15 2 3
    abacabadabacaba
    ba
    1 15
    3 4
    2 14
    Output
    4
    0
    3
    Input
    3 5 2
    aaa
    baaab
    1 3
    1 1
    Output
    0
    0

    题意: 一个母串一个字串 问母串在l,r 中有多少个字串

    #include <set>
    #include <map>
    #include <cmath>
    #include <ctime>
    #include <queue>
    #include <stack>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int main()
    {
        int n,m,q,c,d,i,ge=0,j,vis[100010];
        memset(vis,0,sizeof(vis));
        string a,b;
        cin>>n>>m>>q;
        cin>>a>>b;
        int pos=0;
        while((pos=a.find(b,pos))!=string::npos)
        {
            vis[pos+1]=pos+1;
            pos++;
    
        }
        int l,r;
        for(i=1; i<=q; i++)
        {
            ge=0;
            scanf("%d%d",&l,&r);
            for(j=1; j<=r; j++)
                if(vis[j]!=0&&l<=j&&j<=r-m+1)
                    ge++;
            printf("%d
    ",ge);
        }
    
    }


  • 相关阅读:
    软件质量属性简述
    浅谈MVC架构
    SOA整理
    程序员的自我修养阅读笔记3
    程序员的自我修养阅读笔记2
    程序员的自我修养阅读笔记1
    架构漫谈阅读笔记3
    架构漫谈阅读笔记2
    Weather APP
    php通过==和!==比较NULL和''结果均为真
  • 原文地址:https://www.cnblogs.com/bhd123/p/9453717.html
Copyright © 2011-2022 走看看