#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<map>
#include<queue>
#include<deque>
#include<list>
#include<ctime>
#include<stack>
#include<vector>
#include<iomanip>
#include<set>
#define Maxn
#define mod
typedef long long ll;
#define FOR(i,j,n) for(int i=j;i<=n;i++)
#define DFR(i,j,k) for(int i=j;i>=k;--i)
#define lowbit(a) a&-a
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mem(a) memset(a,0,sizeof(a))
#define eps 1e-9
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
using namespace std;
typedef struct Trie_node{
int counter;
struct Trie_node* next[26];
bool exist;
}TrieNode,*Trie;
TrieNode* createTrieNode()
{ TrieNode *node = (TrieNode*)malloc(sizeof (TrieNode));
node->counter=0;
node->exist=false;
memset(node->next,0,sizeof node->next);
return node;
}
void Trie_insert(Trie root ,char *word)
{ Trie node = root;
char *p = word;
int id;
while(*p)
{ id=*p-'a';
if(node->next[id]== NULL)
{
node->next[id] = createTrieNode();
}
node = node ->next[id];
++p;
node->counter+=1;
}
node->exist=true;
}
int Trie_search(Trie root,char *word)
{ Trie node = root;
char *p = word;
int id;
while( *p )
{
id = *p - 'a';
node = node->next[id];
++p;
if(node == NULL)
return 0;
}
return node->counter;
}
int main()
{ Trie root = createTrieNode();
char str[12] ;
bool flag = false;
while(gets(str))
{
if(flag)
printf("%d\n",Trie_search(root , str));
else
{
if(strlen(str) != 0)
{
Trie_insert(root , str);
}
else
flag = true;
}
}
return 0;
}
poj 1251 trie树
最新推荐文章于 2017-04-11 16:49:27 发布