zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    CSRF攻击原理
    大前端
    尊敬自己,才能拥有改变的力量
    重温尼采语录 序章
    人生的弹性 -- 观《聚宝盆》有感
    求学梦
    爱国情怀
    雾中见我
    找东西
    走在路上的感悟
  • 原文地址:https://www.cnblogs.com/flyljz/p/11659965.html
Copyright © 2011-2022 走看看