hdu1075 ---- What Are You Talking About (字典树)

很明显的字典树查询了,主要是对输入做处理,多次WA后才发现忘了标志单词的前缀的问题了,例如存入hello,后面查找hell是不能查到的,忘了对这个的处理,看到得多练习了。

View Code
  1 //Accepted    1075    281MS    71020K    1500 B    C++
  2 #include <iostream>
  3 #include <cstring>
  4 #include <cstdio>
  5 #include <string>
  6 #define M 26
  7 using namespace std;
  8 int ii;
  9 struct Tree{
 10     Tree* next[M];
 11     char val[30];
 12     int flag;//标记是否存在单词
 13     Tree()
 14     {
 15         for(ii=0;ii<M;ii++)
 16             next[ii] = 0;
 17         flag = 0;
 18     }
 19     ~Tree()
 20     {
 21         for (ii=0;ii<M;ii++)
 22             delete(next[ii]);
 23     }
 24 };
 25 Tree* root = new Tree;
 26 char a[3133];
 27 void insert(char ss[],char s[])
 28 {
 29     int len,i,j;
 30     Tree* p;
 31     len = strlen(s);
 32     p = root;
 33     for(i=0;i<len;i++)
 34     {
 35         j = s[i] - 'a';
 36         if(p->next[j]==0)
 37             p->next[j] = new Tree;
 38         p = p->next[j];
 39     }
 40     strcpy(p->val,ss);
 41     p->flag = 1;
 42 }
 43 void query(char word[])
 44 {    
 45     int len,i,j;
 46     Tree* p;
 47     len = strlen(word);
 48     p = root;
 49     for(i=0;i<len;i++)
 50     {
 51         j = word[i] - 'a';
 52         if(p->next[j]!=0)
 53             p = p->next[j];
 54         else
 55         {
 56             printf("%s",word);
 57             return ;
 58         }
 59     }
 60     if(p->flag == 1)
 61         printf("%s",p->val);
 62     else
 63         printf("%s",word);
 64 }
 65 int main(void)
 66 {
 67     char word[15],ans[15];    
 68     scanf("%s",word);  
 69     while(scanf("%s",word),strcmp(word,"END")!=0)  
 70     {  
 71         scanf("%s",ans);  
 72         insert(word,ans);  
 73     }
 74     scanf("%s",word);  
 75     getchar();
 76     while(gets(a),strcmp(a,"END")!=0)
 77     {
 78         int i = 0, len = 0;
 79         while(a[i]!='\0')
 80         {
 81             if(a[i] <= 'z' && a[i] >= 'a')
 82             {
 83                 ans[len++]=a[i];    
 84             }
 85             else
 86             {
 87                 if(len)
 88                 {
 89                     ans[len]='\0';
 90                     query(ans);
 91                 }            
 92                 if(a[i])    
 93                     printf("%c",a[i]);
 94                 len = 0;
 95             }
 96             i++;
 97         }
 98         printf("\n");
 99     }
100     return 0;
101 }
posted @ 2012-09-19 22:16  Wheat″  阅读(204)  评论(0)    收藏  举报