hdu 1247(Hat’s Words)

hdu 1247(Hat’s Words)
 1 #include <cstdio>
 2 #include <cstring>
 3  #define MAXSIZE 50001
 4  char str[MAXSIZE][100];
 5  struct Tries{
 6      int nodes;
 7     Tries *next[26];
 8     Tries(){
 9         nodes=0;
10         memset(next,NULL, sizeof(next));
11     }
12 };
13 Tries *tree= new Tries();
14  void insert( char word[]){
15     Tries *temp=tree;
16      int i=0;
17      while(word[i]){
18          int k=word[i]-'a';
19          if(temp->next[k]==NULL)
20             temp->next[k]= new Tries();
21         temp=temp->next[k];
22         i++;
23     }
24     temp->nodes++;
25 }
26 
27  bool visited( char word[]){
28     Tries *temp=tree;
29      int i=0;
30      while(word[i]){
31          int k=word[i]-'a';
32          if(temp->next[k]==NULL)
33              return  false;
34         temp=temp->next[k];
35          if(temp->nodes&&word[i+1]=='\0')
36              return  true;
37         i++;
38     }
39      return  false;
40 }
41 
42  bool query( char word[]){
43     Tries *temp=tree;
44      int i=0;
45      while(word[i]){
46          int k=word[i]-'a';
47          if(temp->next[k]==NULL)
48              return  false;
49         temp=temp->next[k];
50          if(temp->nodes&&visited(&word[i+1]))
51              return  true;
52         i++;
53     }
54      return  false;
55 }
56  int main(){
57     #ifndef ONLINE_JUDGE
58     freopen("in.txt","r",stdin);
59      #endif 
60      int j,i=0;
61      while(gets(str[i]))
62         insert(str[i++]);
63      for(j=0;j<i;j++)
64          if(query(str[j]))
65             puts(str[j]);
66      return 0;
67 }

你可能感兴趣的:(hdu 1247(Hat’s Words))