#include <iostream>#include<cstdio>#include<cstring>#include<sstream>using namespacestd;#defineMax 26Const intmaxn=100000; typedefstructtrienode{intncount;//change as neededstructTrienode *Next[max];} Trienode; Trienode*root=NULL;intallcop=0, Ans,flag; Trienode MEMORY[MAXN]; Trienode*Creattrienode () {Trienode*temp=&memory[allcop++]; Temp->ncount=0; for(intI=0; i<max;i++) temp->next[i]=NULL; returntemp;}voidInserttrie (Trienode **proot,Char*str) {Trienode*temp=*Proot; intI=0, K; while(Str[i]) {k=str[i]-'a'; if(temp->Next[k]) { //temp->next[k]->ncount++;}Elsetemp->next[k]=Creattrienode (); Temp=temp->Next[k]; I++; } temp->ncount++;}intSearchtrie (Trienode *root,Char*str) { if(Root==null)return 0; Trienode*temp=Root; intI=0, K; while(Str[i]) {k=str[i]-'a'; if(temp->Next[k]) {Temp=temp->Next[k]; } Else return 0; I++; } returnTemp->ncount;}voidTraverse (Trienode *root) { for(intI=0; i<max;i++){ if(root->Next[i]) { if(root->next[i]->ncount>0) ans++; Traverse (Root-Next[i]); } }}Charstr[1010];voidinit () {ans=0; Flag=0; Allcop=0; memset (Memory,0,sizeof(memory)); Root=Creattrienode ();}intMain () { while(1) {init (); stringLine ; Getline (Cin,line); StringStream SS (line); while(ss>>str) { if(str[0]=='#') {flag=1; Break; } Inserttrie (&root,str); } if(flag) Break; Traverse (root); printf ("%d\n", ans); } return 0;}
Input method is worth learning
hdu2027 trie Tree Dictionary tree Template