HDU 1251 统计难题

 

http://acm.hdu.edu.cn/showproblem.php?pid=1251

 

解题思路:数据量太大,遍历字典一定超时,所以就直接用字典树做了。

 

#include <stdio.h> #include <string.h> struct trie { trie *child[26]; int num; }*root; /* 插入单词到字典树中 */ void insert(char *str) { int i,j,len; trie *curren,*newnode; len = strlen(str); if(str==0) return; curren=root; for (i=0;i<len;i++) { if(curren->child[str[i]-'a']!=0) { curren=curren->child[str[i]-'a']; curren->num=curren->num+1; } else { newnode = new trie; for (j=0;j<26;j++) newnode->child[j]=0; curren->child[str[i]-'a']=newnode; curren=curren->child[str[i]-'a']; curren->num=1; } } } /* 查找前缀单词,返回匹配单词数量 */ int find(char *str) { int i,j,len; trie *curren; len = strlen(str); if(len==0) return 0; curren=root; for (i=0;i<len;i++) { if(curren->child[str[i]-'a']!=0) curren=curren->child[str[i]-'a']; else return 0; } return curren->num; } int main() { int i; char str[11]; root=new trie; for (i=0;i<26;i++) root->child[i]=NULL; root->num=2; while (gets(str),strcmp(str,"")!=0) insert(str); while (gets(str)) { i=find(str); printf("%d/n",i); } return 0; }

 

 

你可能感兴趣的:(HDU 1251 统计难题)