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

 

你可能感兴趣的:(media)