【悬关】16分#5AC#12346WA求助

P8306 【模板】字典树

Mobius_CaO @ 2023-08-14 21:12:12

RT

#include<bits/stdc++.h>
using namespace std;
const int N=3e6+5;
int t,p,ans;
int trie[N][64];
int vis[N];
int num(char c){
    if(c-'0'>=0&&c-'0'<=9)return c-'0';
    if(c-'A'>=0&&c-'A'<=26)return c-'A'+10;
    return c-'a'+37;
}
void init(int n){
    for(int i=0;i<n;i++){
        string str;
        cin>>str;
        int j=0,k=0;
        int c=num(str[j]);
        while(trie[k][c]&&j<str.length()){
            k=trie[k][c];
            c=num(str[++j]);
            vis[k]++;
        }
        for(;j<str.length();j++,k=p){
            c=num(str[j]);
            trie[k][c]=++p;
            vis[k]++;
        }
    }
    return ;
void ques(int q){
    for(int i=0;i<q;i++){
        string str;
        cin>>str;
        int j=0,c=num(str[j]),k=0,prek=k;
        bool bi=false;
        if(!trie[k][c]){
                printf("0\n");
                bi=true;
                break;
            }
        }
        if(bi)continue;
        printf("%d\n",vis[prek]);
    }
    return ;
}
int main(){
    scanf("%d",&t);
    for(int i=0;i<t;i++){
        int n,q;
        scanf("%d%d",&n,&q);
        init(n);
        ques(q);for(int j=0;j<=p;j++){
            vis[j]=0;
            for(int k=0;k<64;k++){
                trie[j][k]=0;
            }
        }
        p=0;
    }
    return 0;
}

灰常感谢喵~o( =∩ω∩= )m


|