1 /*
2 * 字典树
3 */
4 #include <cstdio>
5 #include <cstdlib>
6 #include <cstring>
7 #include <iostream>
8
9 using namespace std;
10
11 const int N = 11;
12
13 char str[N];
14 struct node {//节点数据
15 int c; //统计前缀个数
16 node *child[26];
17 node() {//初始化
18 c = 1;
19 for (int i=0; i<26; ++i) child[i] = NULL;
20 }
21 }*root;
22
23 void insert(char str[]) {
24 node *p = root;
25 for (int k,i=0; str[i]; ++i, p=p->child[k]) {
26 k = str[i] - 'a';
27 if (p->child[k]) ++p->child[k]->c;
28 else p->child[k] = new node();
29 }
30 }
31
32 int search(char str[]) {
33 node *p = root;
34 for (int k,i=0; str[i]; ++i) {
35 k = str[i] - 'a';
36 if (p->child[k]) p = p->child[k];
37 else return 0;
38 }
39 return p->c;
40 }
41
42 int main() {
43 root = new node();
44 while (gets(str), strcmp(str, "")) insert(str);
45 while (scanf("%s", str) != EOF) printf ("%d\n", search(str));
46 return 0;
47 }