HDOJ 1251 -- 统计难题 Trie

Trie的写法是很灵活的,感觉跟segment tree一样,要活用

 1 /*

 2 PROG:   统计难题

 3 ID  :   ouyangyewei

 4 LANG:   C++

 5 */

 6 #include <string>

 7 #include <cstdio>

 8 #include <cstdlib>

 9 #include <memory.h>

10 #include <iostream>

11 #include <algorithm>

12 using namespace std;

13 

14 struct Trie_Node

15 {

16     int  cnt;

17     Trie_Node *branch[27];

18     Trie_Node():cnt( 0 )

19     {

20         memset( branch, 0, sizeof(branch) );

21     }// Init

22 };

23 

24 class Trie

25 {

26     public:

27         Trie();

28         void Trie_Insert( char ss[] );

29         int  Trie_Find( char ss[] );

30         

31     private:

32         Trie_Node *root;

33 }t;

34 

35 Trie::Trie()

36 {

37     root = new Trie_Node();

38 }// Trie

39 

40 void Trie::Trie_Insert( char ss[] )

41 {

42     Trie_Node *ptr = root;

43     Trie_Node *temp = NULL;

44     int slen = strlen( ss );

45     for ( int i=0; i<slen ;++i )

46     {

47         if ( ptr->branch[ ss[i]-'a' ]==NULL )

48         {

49             temp = new Trie_Node();

50             ptr->branch[ ss[i]-'a' ] = temp;

51         }

52         

53         ++( ptr->branch[ ss[i]-'a' ]->cnt );

54         ptr = ptr->branch[ ss[i]-'a' ];

55     }// Insert

56     

57     return ;

58 }// Trie_Insert

59 

60 int Trie::Trie_Find( char ss[] )

61 {

62     int i, slen = strlen( ss );

63     Trie_Node *ptr = root;

64     for ( i=0; i<slen; ++i )

65     {

66         ptr = ptr->branch[ ss[i]-'a' ];

67         if ( ptr==NULL )    break;

68     }

69     

70     if ( i==slen )

71         return ( ptr->cnt );

72     else

73         return 0;

74 }// Trie_Find

75 

76 int main()

77 {

78     char vocabu[12];

79     while ( gets( vocabu ) )

80     {

81         if ( !strcmp( vocabu, "" ) )    break;

82         t.Trie_Insert( vocabu );

83     }// creat the trie

84     

85     while ( EOF != scanf("%s", vocabu) )

86     {

87         printf("%d\n", t.Trie_Find( vocabu ));

88     }// Find the prefix

89     

90     return 0;

91 }

你可能感兴趣的:(trie)