hdu 1305 Immediate Decodability

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1305

字典树裸题,如下:

 

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cstdio>
 6 const int Max_N = 100000;
 7 struct Node{
 8     int cnt;
 9     Node *next[2];
10     inline void set(){
11         cnt = 0;
12         for (int i = 0; i < 2; i++) next[i] = NULL;
13     }
14 };
15 struct Trie{
16     Node stack[Max_N], *root, *tail;
17     void init(){
18         tail = &stack[0];
19         root = tail++;
20         root->set();
21     }
22     inline Node *newNode(){
23         Node *p = tail++;
24         p->set();
25         return p;
26     }
27     inline void insert(Node *x, char *src){
28         char *p = src;
29         while (*p != '\0'){
30             if (!x->next[*p - '0']) x->next[*p - '0'] = newNode();
31             x = x->next[*p - '0'];
32             x->cnt++;
33             p++;
34         }
35     }
36     inline int query(Node *x, char *src){
37         char *p = src;
38         while (*p != '\0'){
39             if (!x || !x->next[*p - '0']) return 0;
40             x = x->next[*p - '0'];
41             p++;
42         }
43         return x->cnt;
44     }
45     inline void insert(char *src){
46         insert(root, src);
47     }
48     inline int query(char *src){
49         return query(root, src);
50     }
51 }trie;
52 char ret[20][200], buf[200];
53 int main(){
54 #ifdef LOCAL
55     freopen("in.txt", "r", stdin);
56     freopen("out.txt", "w+", stdout);
57 #endif
58     trie.init();
59     int i, n = 0, k = 1, flag = 1;
60     while (~scanf("%s", buf)){
61         if (0 != strcmp(buf, "9")){
62             trie.insert(buf);
63             strcpy(ret[n++], buf);
64         } else if (0 == strcmp(buf, "9")){
65             flag = 0;
66             for (i = 0; i < n; i++){
67                 if (trie.query(ret[i]) > 1){
68                     printf("Set %d is not immediately decodable\n", k++);
69                     flag = 1;
70                     break;
71                 }
72             }
73             if (!flag) printf("Set %d is immediately decodable\n", k++);
74             n =  0, flag = 1;
75             trie.init();
76         }
77     }
78     return 0;
79 }
View Code

 

posted @ 2015-05-07 16:27  GadyPu  阅读(151)  评论(0编辑  收藏  举报