poj 1251 trie树

来源:互联网 发布:盐和避难所 mac 中文 编辑:程序博客网 时间:2024/05/17 14:26
#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 modtypedef 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-9const 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;}

0 0
原创粉丝点击