https://www.luogu.com.cn/record/142153918
#include<bits/stdc++.h>
using namespace std;
constexpr int MAXN = 3e6+5;
int trie[MAXN][63],idx,tcnt[MAXN];
char tmps[MAXN];
int change(char x){
if(x>='0'&&x<='9') return x-'0';
else if(x>='A'&&x<='Z') return x-'A'+10;
else if(x>='a'&&x<='z') return x-'a'+36;
}
void tadd(const char *x){
int tmp=0;
int len = strlen(x);
for(int i=0;i<len;i++){
if(!trie[tmp][change(x[i])]) trie[tmp][change(x[i])] = ++idx;
tmp=trie[tmp][change(x[i])];
tcnt[tmp]++;
}
}
int tfind(const char *x){
int tmp=0;
int len = strlen(x);
for(int i=0;i<len;i++){
if(!trie[tmp][change(x[i])]) return 0;
tmp=trie[tmp][change(x[i])];
}
return tcnt[tmp];
}
int main(){
int T;
scanf("%d",&T);
for(int t=1;t<=T;t++){
for(int i=0;i<=idx;i++) tcnt[idx] = 0;
for(int i=0;i<=idx;i++)
for(int j=0;j<=62;j++)
trie[i][j] = 0;
idx=0;
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",&tmps);
tadd(tmps);
}
for(int i=1;i<=m;i++){
scanf("%s",&tmps);
printf("%d\n",tfind(tmps));
}
}
return 0;
}