zoj 1109 Language of FatMouse

Time Limit: 10 Seconds      Memory Limit: 32768 KB
   本题是一个简单的字典树的问题,但是用map也能水过,不过我还是想用字典树,算是锻炼一下自己吧!用字典可以更快一些
用map容器的代码:(1970ms)
   
     
1 #include < iostream >
2 #include < map >
3 #include < string >
4   using namespace std;
5 int main()
6 {
7 map < string , string > m;
8 char c[ 40 ],a[ 20 ],b[ 20 ];
9 int i,index,len,j;
10 while ( 1 )
11 {
12 gets(c);
13 j = 0 ;
14 len = strlen(c);
15 if (len == 0 )
16 break ;
17 for (i = 0 ;i < len;i ++ )
18 if (c[i] == ' ' )
19 {
20 index = i;
21 break ;
22 }
23 else
24 a[i] = c[i];
25 for (i = index + 1 ;i < len;i ++ )
26 b[j ++ ] = c[i];
27 b[j] = ' \0 ' ;
28 a[index] = ' \0 ' ;
29 m[b] = a;
30 }
31 map < string , string > ::iterator it;
32 while (scanf( " %s " ,c) != EOF)
33 {
34 it = m.find(c);
35 if (it != m.end())
36 {
37 cout << ( * it).second << endl;
38 }
39 else
40 cout << " eh " << endl;
41 }
42 return 0 ;
43 }
44

 

字典树  代码:(130ms)
   
     
1 #include < stdio.h >
2 #include < stdlib.h >
3 #include < string .h >
4   #define MAX 100005
5 typedef struct node
6 {
7 struct node * next[ 30 ];
8 char s[ 10 ];
9 int h;
10 } * Trie,T;
11 void init(Trie & root)
12 {
13 int i;
14 root = (Trie)malloc( sizeof (node));
15 root -> h = 0 ;
16 for (i = 0 ;i < 30 ;i ++ )
17 {
18 root -> next[i] = NULL;
19 }
20 }
21 void insert( char path[], char s[],Trie root)
22 {
23 int len,i,j;
24 len = strlen(path);
25 for (i = 0 ;i < len;i ++ )
26 {
27 if (root -> next[path[i] - ' a ' ] == NULL)
28 {
29 Trie t = (Trie)malloc( sizeof (T));
30 for (j = 0 ;j < 30 ;j ++ )
31 {
32 t -> next[j] = NULL;
33 t -> h = 0 ;
34 }
35 root -> next[path[i] - ' a ' ] = t;
36 }
37 root = root -> next[path[i] - ' a ' ];
38 }
39 root -> h = 1 ;
40 strcpy(root -> s,s);
41 }
42 void find( char s[],Trie root)
43 {
44 int len,i;
45 len = strlen(s);
46 for (i = 0 ;i < len;i ++ )
47 {
48 if (root -> next[s[i] - ' a ' ] != NULL)
49 root = root -> next[s[i] - ' a ' ];
50 else
51 break ;
52 }
53 if (i == len && root -> h == 1 )
54 printf( " %s " ,root -> s);
55 else
56 printf( " eh " );
57 }
58 int main()
59 {
60 Trie root;
61 char a[ 20 ],b[ 20 ],c[ 40 ];
62 int len,i,j,index;
63 init(root);
64
65 while ( 1 )
66 {
67 gets(c);
68 j = 0 ;
69 len = strlen(c);
70 if (len == 0 )
71 break ;
72 for (i = 0 ;i < len;i ++ )
73 if (c[i] == ' ' )
74 {
75 index = i;
76 break ;
77 }
78 else
79 a[i] = c[i];
80 for (i = index + 1 ;i < len;i ++ )
81 b[j ++ ] = c[i];
82 b[j] = ' \0 ' ;
83 a[index] = ' \0 ' ;
84 insert(b,a,root);
85 }
86 while (scanf( " %s " ,c) != EOF)
87 {
88 find(c,root);
89 printf( " \n " );
90 }
91 return 0 ;
92 }
93
94

 

 

你可能感兴趣的:(language)