统计难题(字典树的最简单吧)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 }