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