3 条题解

  • 0
    @ 2022-8-25 12:04:00
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int n,m,tot;
    int trie[1000010][27],cnt[1000010];
    void in(char s[1000010]) {
        int len=strlen(s),p=0;
        for(int i=0;i<len;i++) {
            int ch=s[i]-'a';
            if(!trie[p][ch]) trie[p][ch]=++tot;
            p=trie[p][ch];
        }
        cnt[p]++;
    }
    int inster(char s[1000010]) {
        int ans=0;
        int len=strlen(s),p=0;
        for(int i=0;i<len;i++) {
            int ch=s[i]-'a';
            p=trie[p][ch];
            if(!p) return ans;
            ans+=cnt[p];
        }
        return ans;
    }
    int main()
    {
        char s[1000010];
        cin >> n >> m; 
        for(int i=1;i<=n;i++) {
            scanf("%s",s); in(s);
        }
        for(int i=1;i<=m;i++) {
            scanf("%s",s);
            printf("%d\n",inster(s));
        }
        return 0;
    }
    

    信息

    ID
    53
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    116
    已通过
    60
    上传者