统计难题(字典树的最简单吧)hdu 1251

http://acm.hdu.edu.cn/showproblem.php?pid=1251

 

就是建立一颗字典树,字典树定义相信看看百度就懂,不过写树不会写了很久。。。发现指针在建树的时候连不上,后来发现是因为我当q=NULL的时候就给他建树,但实际上这时候q已经跟我的树没有了关系,所以他建立的新空间等于没用,改了就好了,注意查找的时候某些是没有的,容易查找到NULL的空间而爆掉。。。

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<malloc.h>
 4 struct p
 5 {
 6     int no;
 7     struct p *son[30];
 8 }*father[30];
 9 
10 int check(char s[30])
11 {
12     struct p *q=father[s[0]-'a'];
13     int x,l=strlen(s);
14     if(q==NULL)
15     {
16         printf("0\n");
17         return 0;
18     }
19     for(x=1;x<l;x++)
20     {
21         q=q->son[s[x]-'a'];
22         if(q==NULL)
23         { 
24             printf("0\n");
25             return 0;
26         }
27     }
28     printf("%d\n",q->no);
29     return 0;
30 }   
31 void set()
32 {
33     int x,y;
34 for(x=0;x<26;x++)
35         father[x]=(struct p*)malloc(sizeof(struct p));
36     for(x=0;x<26;x++)
37     {
38         for(y=0;y<26;y++)
39             father[x]->son[y]=NULL;
40         father[x]->no=0;
41     }
42     return ;
43 }
44 void insert(int l,char s[30])
45 {
46     int x,y;
47         struct p *q=father[s[0]-'a'];
48         q->no++;
49         for(x=1;x<l;x++)
50         {
51             if(q->son[s[x]-'a']==NULL)
52             {
53                 q->son[s[x]-'a']=(struct p*)malloc(sizeof(struct p));
54                 q=q->son[s[x]-'a'];
55                 for(y=0;y<26;y++)
56                     q->son[y]=NULL;
57                 q->no=0;
58             }
59             else
60                 q=q->son[s[x]-'a'];
61             q->no++; 
62         }
63    return ;
64 }
65 int main()
66 {
67     char s[15];
68     int checkit=0;
69  
70     set();
71 
72     while(gets(s))
73     {
74         int l=strlen(s);
75         if(l==0)
76         {
77             checkit=1;
78             continue;
79         }
80         if(checkit==0)
81             insert(l,s);
82         else
83             check(s);
84     }
85     return 0;
86 }

posted on 2012-06-29 23:49  usp10  阅读(233)  评论(0编辑  收藏  举报

导航