• acwing 142. 前缀统计


    题面:

    给定N个字符串S1,S2SNS1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1S1~SNSN中有多少个字符串是T的前缀。

    输入字符串的总长度不超过106106,仅包含小写字母。

    输入格式

    第一行输入两个整数N,M。

    接下来N行每行输入一个字符串SiSi。

    接下来M行每行一个字符串T用以询问。

    输出格式

    对于每个询问,输出一个整数表示答案。

    每个答案占一行。

    输入样例:

    3 2
    ab
    bc
    abc
    abc
    efg
    

    输出样例:

    2
    0
    题解:
    这是比较裸的trie题
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int son[1000010][26],cnt[1000010],idx;
    char str[1000010];
    void insert()
    {
        int p=0;
        for(int i=0;str[i];i++)
        {
            int &s=son[p][str[i]-'a'];
            if(!s)s=++idx;
            p=s;
        }
        cnt[p]++;
    }
    int query()
    {
        int p=0;int res=0;
        for(int i=0;str[i];i++)
        {
            int &s=son[p][str[i]-'a'];
            if(!s)break;
            p=s;
            res+=cnt[p];
        }
        return res;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        while(n--)
        {
            scanf("%s",str);
            insert();
        }
        while(m--)
        {
            scanf("%s",str);
            printf("%d
    ",query());
        }
        return 0;
    }
  • 相关阅读:
    Fish
    Brackets
    StoneWall【★★★★★】
    Nesting
    ajax补充FormData
    初始Ajax
    extra过滤
    Django 之缓存
    django中的信号
    Form组件归类
  • 原文地址:https://www.cnblogs.com/flyljz/p/11659965.html
Copyright © 2020-2023  润新知