F06【模板】字典树(Trie)
// 字典树 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; }
AT_agc057_c [AGC057C] Increment or Xor - 洛谷
浙公网安备 33010602011771号