第一次写Trie树,完全抄的模板。
#include <iostream>
using namespace std;
const int kind = 26;
struct Treenode
{
int count;
Treenode *next[kind];
Treenode ()
{
count = 1;
for ( int i = 0; i < kind; ++i )
next[i] = NULL;
}
};
void Insert ( Treenode *&root, char *word )
{
Treenode *location = root;
int i = 0, branch = 0;
if ( location == NULL )
{
location = new Treenode();
root = location;
}
while ( word[i] )
{
branch = word[i] - 'a';
if ( location->next[branch] )
location->next[branch]->count++;
else
location->next[branch] = new Treenode();
i++;
location = location->next[branch];
}
}
int Search ( Treenode *root, char *word )
{
Treenode *location = root;
int i = 0, branch = 0, ans;
if ( location == NULL )
return 0;
while ( word[i] )
{
branch = word[i] - 'a';
if ( !location->next[branch] )
return 0;
i++;
location = location->next[branch];
ans = location->count;
}
return ans;
}
int main()
{
char word[10];
char query[10];
Treenode *root = NULL;
while ( gets(word) )
{
if ( (word[0]==0) ) break;
Insert ( root, word );
}
while ( gets(query) )
cout << Search(root,query) << endl;
return 0;
}