HDU1251 统计难题 Trie树

题目很水,但毕竟是自己第一道的Trie,所以还是发一下吧.Trie的更多的应用慢慢学,AC自动机什么的也慢慢学....

#include<iostream>

#include<cstring>

#include<string>

#include<cstdio>

#include<algorithm>

#include<cmath>

#define maxn 

using namespace std;



struct TrieNode

{

	int cnt;

	int flag;

	TrieNode *next[26];

}T[500000],*Trie;



int top;



void insert(char *c)

{

	int len=strlen(c);TrieNode *p=Trie;

	for(int i=0;i<len;++i){

		if(p->next[c[i]-'a']!=NULL){

			p=p->next[c[i]-'a'];

			p->cnt++;

		}

		else{

			T[top++].cnt=1;

			p->next[c[i]-'a']=&T[top];

			p=p->next[c[i]-'a'];

		}

	}

	p->flag=true;

}



int find(char *c)

{

	int len=strlen(c);TrieNode *p=Trie;

	for(int i=0;i<len;++i){

		if(p->next[c[i]-'a']!=NULL){

			p=p->next[c[i]-'a'];

		}

		else{

			return 0;

		}

	}

	return p->cnt;

}



int main()

{

	char str[15];top=0;

	Trie=&T[top++];bool flag=false;;

	while(gets(str))

	{

		if(flag){

			printf("%d\n",find(str));

			continue;

		}

		if(strlen(str)==0){

			flag=true;continue;

		}

		insert(str);

	}

	return 0;

}

 

你可能感兴趣的:(trie)