F06【模板】字典树(Trie)

F06 字典树(Trie)_哔哩哔哩_bilibi

 

P8306 【模板】字典树 - 洛谷

// 字典树 O(n)
#include<bits/stdc++.h>
using namespace std;

const int N=3000005;
int T,q,n;
char s[N];
int ch[N][65],cnt[N],idx;

int getnum(char x){
  if(x>='A'&&x<='Z') return x-'A';
  else if(x>='a'&&x<='z') return x-'a'+26;
  else return x-'0'+52;
}
void insert(char *s){
  int p=0;
  for(int i=0; s[i]; i++){
    int j=getnum(s[i]); //字母映射
    if(!ch[p][j]) ch[p][j]=++idx;
    p=ch[p][j];
    cnt[p]++; //插入次数
  }
}
int query(char *s){
  int p=0;
  for(int i=0; s[i]; i++){
    int j=getnum(s[i]);
    if(!ch[p][j]) return 0;
    p=ch[p][j];
  }
  return cnt[p];
}
int main(){
  scanf("%d",&T);
  while(T--){
    for(int i=0;i<=idx;i++)
      for(int j=0;j<=122;j++) ch[i][j]=0;
    for(int i=0;i<=idx;i++) cnt[i]=0;
    idx=0;
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++)
      scanf("%s",s), insert(s);
    for(int i=1;i<=q;i++)
      scanf("%s",s), printf("%d\n",query(s));
  }
  return 0;
}

 

P4407 [JSOI2009] 电子字典 - 洛谷

P6088 [JSOI2015] 字符串树 - 洛谷

P6623 [省选联考 2020 A 卷] 树 - 洛谷

AT_agc057_c [AGC057C] Increment or Xor - 洛谷

 

posted @ 2022-04-15 08:49  董晓  阅读(2224)  评论(3)    收藏  举报