1 条题解
-
1
#include <bits/stdc++.h> #define ll long long using namespace std; const int N = 3000005; int n, m, k, s, t, tot; int trie[N][123], sum[N]; char str[N]; void insert(char *str){ // 在字典树中插入字符串str int len = strlen(str), p = 1; for (int k = 0; k < len; ++k){ // 遍历str字符串 int ch = str[k]; // 映射小写字母 if (trie[p][ch] == 0) // 如果没有这个节点 trie[p][ch] = ++tot; p = trie[p][ch];// 跳到该节点 sum[p]++;//以p为根的子树中结束位置的字符串数量+1 } } int query(char *str){ int len = strlen(str), p = 1; for (int k = 0; k < len; k++){ // 遍历str字符串 p = trie[p][str[k]]; //令p沿着T串字符前进 if (p == 0) // 如果没有这个节点 return 0; } return sum[p]; } int main(){ int T; cin>>T; while (T--){ for (int i=1;i<=tot;++i){//清空 sum[i]=0; for (int j=0;j<=122;++j) trie[i][j]=0; } tot=1; cin >> n >> m; for (int i = 1; i <= n; ++i){ cin >> str; insert(str); } for (int i = 1; i <= m; ++i){ cin >> str; cout << query(str) << "\n"; } } }
- 1
信息
- ID
- 482
- 时间
- 1000ms
- 内存
- 1024MiB
- 难度
- 7
- 标签
- 递交数
- 97
- 已通过
- 25
- 上传者