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; }