字典树--HDU 1251统计
来源:互联网 发布:淘宝发布网络推广类目 编辑:程序博客网 时间:2024/06/05 17:50
题意
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是需要统计的单词, 一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 然后输出对于每个提问,给出以该字符串为前缀的单词的数量.
代码
很裸的字典树, 直接套用模板 几乎不用改变即可:
#include <iostream>#include <string.h>#include <stdlib.h>#include <stdio.h>using namespace std;#define MAX 26struct Trie{ Trie *next[MAX]; //表示每层多少种类的数,分支数 int v; //有多少个到此为前缀};Trie *root;void createTrie(char *str){ int len=strlen(str); Trie *p=root,*q; for(int i=0; i<len;i++) { int id= str[i]-'a'; if(!p->next[id]) { q=new Trie(); q->v=1; for(int j=0; j<MAX; j++) { q->next[j]=NULL; } p->next[id]=q; p=p->next[id]; } else { p->next[id]->v++; p=p->next[id]; } }}int findTrie(char *str){ int len=strlen(str); Trie * p= root; for(int i=0; i<len; i++) { int id=str[i]-'a'; p=p->next[id]; if(!p) return 0; } return p->v;}void del(Trie *T){ if (!T) return; for(int i=0; i<MAX; i++) { if(T->next[i]) del(T->next[i]); } delete(T);}int main(){ char str[15]; root=new Trie(); for(int i=0;i<MAX;i++) root->next[i]=NULL; while(gets(str)&&str[0]!='\0') createTrie(str);//建立字典 while(~scanf("%s",str)) { printf("%d\n",findTrie(str)); } del(root);//删除节点,释放内存}
0 0
- 字典树--HDU 1251统计
- HDU 1251 统计难题 字典树
- HDU 1251统计难题(字典树)
- [字典树 ]hdu 1251 统计难题
- 统计难题 hdu 1251 字典树
- hdu 1251 统计难题 字典树
- HDU 1251 统计难题 -- 字典树
- HDU 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu-1251-统计难题(字典树)
- hdu 1251 统计难题 (字典树)
- HDU 1251统计难题 字典树
- hdu 1251 统计难题 (字典树)
- HDU 1251 统计难题(字典树)
- hdu 1251 统计难题 字典树
- hdu 1251 统计难题 字典树
- VirtualBox内Linux系统怎样与Windows共享文件夹
- 在ASP.NET MVC中使用PagedList之2--将查询关键字传入后端
- leetcode:Find Minimum in Rotated Sorted Array II 菜鸟解法
- unity3d Mecanim动画系统获取动画层、动画状态等方法
- 工作中遇到的几个的总结
- 字典树--HDU 1251统计
- 习题9-1 最长的滑雪路径 UVa10285
- 【BestCoder】#Valentine's Day Round
- 1368 - DNA Consensus String
- C - Elevator
- ACM比赛经验
- 简单视频加密与授权
- 2013 Mac Air 装Win7双系统问题-安装程序无法创建新的分区,也无法定位系统 & Windows无法安装所需的文件,错误代码0x80070570
- 小寒假第七天总结 转 Objective-C语法: