杭电1251——统计难题(字典树的应用)
2016-02-04 17:13
344 查看
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251
主要算法:
该题运用了字典树的知识。输入单词时,建立字典树。每个节点的v的值代表从根节点到该节点路径上所有字母组成的前缀出现的次数。当输入前缀时,只需查找字典树中是否有该前缀,若有,输出前缀的最后一个字母的v 的值,若无,输出0.
AC代码:
主要算法:
该题运用了字典树的知识。输入单词时,建立字典树。每个节点的v的值代表从根节点到该节点路径上所有字母组成的前缀出现的次数。当输入前缀时,只需查找字典树中是否有该前缀,若有,输出前缀的最后一个字母的v 的值,若无,输出0.
AC代码:
# include<stdio.h> # include<string.h> # include<malloc.h> # define MAX 26 typedef struct Trie{ struct Trie *next[MAX]; int v;//记录以该节点为最后一个字母的前缀出现的次数 }Trie; Trie * root=NULL; void insertTrie(char words[]); void createTrie(); int search(char perfix[]); int main() { createTrie(); char perfix[10]; while(scanf("%s",perfix)!=EOF) { printf("%d\n",search(perfix)); } return 0; } //建立字典树 void createTrie() { int i; char words[12]; if(!root) root=(Trie *)malloc(sizeof(Trie)); for(i=0;i<MAX;i++) root->next[i]=NULL; root->v=0; while(gets(words)&&strcmp(words,"\0")!=0)//gets()函数读入整行数据,并且将'\n'换成'\0' { insertTrie(words); } } //将单词插入字典树中 void insertTrie(char words[]) { Trie *p=root; int len=strlen(words),i,j; for(i=0;i<len;i++) { int id=words[i]-'a'; if(p->next[id]==NULL)//该层上不存在‘a’+id的节点,新建,并且置v=1 { p->next[id]=(Trie *)malloc(sizeof(Trie)); p=p->next[id]; p->v=1; for(j=0;j<MAX;j++) p->next[j]=NULL; } else { p=p->next[id]; (p->v)++; } } } //在字典树中查询是否存在前缀 int search(char perfix[]) { Trie *p=root; int len=strlen(perfix),i; for(i=0;i<len;i++) { int id=perfix[i]-'a'; if(p->next[id]==NULL) break; p=p->next[id]; } if(i<len) return 0; else return p->v; }
相关文章推荐
- eclipse中Preferences的一些设置
- eclipse中文乱码问题解决方案
- hdu1005
- STM32固件库V3.5.0的CMSIS文件解析
- Java类加载器
- 简单的请求处理
- iOS开发--系统通讯录的访问与添加联系人
- #专题# 网络流与线性规划
- 函数调用时函数栈状态分析
- Qt错误 No rule to make target needed by 'Makefile'
- 【Android】3.25 示例25--调启百度地图
- gcc 怎样指定include路径
- C++ previous declaration of...with 'C++' linkage
- ora-0000 normal跟/etc/hosts有关
- SOAP webserivce 和 RESTful webservice 的那些事
- MDK4选项说明
- C++使用STL:慎重选择删除元素的方法
- 測试加入多级文件夹篇
- Beaglebone Black– 智能家居控制系统 LAS - 网页服务器 Node.js 、Web Service、页面 和 TCP 请求转 UDP 发送
- 不无聊的序列(Non-boring sequences,Bzoj4059,CERC2012)