HDU 1251 - 统计难题

用字典树统计个数。

一定要交C++。G++MLE。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <cstdlib>
 6 using namespace std;
 7 struct Trie
 8 {
 9     Trie *next[26];
10     int count;
11     Trie()
12     {
13         count=0;
14         for(int i=0;i<26;i++) next[i]=NULL;
15     }
16 };
17 void insert(Trie *s,char x[])
18 {
19     int k;
20     for(int i=0;x[i];i++)
21     {
22         k=x[i]-'a';
23         if(s->next[k]==NULL)
24             s->next[k]=new Trie;
25         s=s->next[k];
26         ++s->count;
27     }
28 }
29 int find(Trie *s,char x[])
30 {
31     int k;
32     for(int i=0;x[i];i++)
33     {
34         k=x[i]-'a';
35         if(s->next[k]) s=s->next[k];
36         else return 0;
37     }
38     return s->count;
39 }
40 int main()
41 {
42     int num=0;
43     Trie* root=new Trie;
44     char s[20];
45     while(gets(s),strcmp(s,""))
46     {
47         insert(root,s);
48     }
49     while(gets(s)!=NULL)
50     {
51         printf("%d\n",find(root,s)) ;
52     }
53 }

 

posted @ 2016-07-18 21:49  nicetomeetu  阅读(159)  评论(0编辑  收藏  举报