题意:

统计难题
Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).

Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.注意:本题只有一组测试数据,处理到文件结束.

Output
对于每个提问,给出以该字符串为前缀的单词的数量.

Sample Input
banana
band
bee
absolute
acm

ba
b
band
abc

Sample Output
2
3
1
0

思路:  

      两种做法,一个是hash就是把每个给定的串拆成len个串,然后hash[now_str] ++ ,在询问的时候直接输出hash[str]就行了,这里的hash我用容器实的,map<string ,int>,或者这个题目可以用字典树实现,字典树实现也很简单,就是基本的在每个节点上记录当前这个节点出现了多少次,然后查找就行了。下面给出两个方法的代码。


hash

#include<stdio.h>
#include<string.h>
#include<string>
#include<map>

using namespace std;char str[15];
map<string ,int>my_map;int main ()
{my_map.clear();while(gets(str) ,strlen(str)){int i ,l = strlen(str);char temp[15];for(i = 0 ;i < l ;i ++){temp[i] = str[i];temp[i+1] = '\0';my_map[temp]++;} }while(gets(str)){printf("%d\n" ,my_map[str]);}return 0;
}

字典树


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct Tree
{Tree *next[26];int v;
}Tree;Tree root;void Buid_Tree(char *str)
{int len = strlen(str);Tree *p = &root ,*q;for(int i = 0 ;i < len ;i ++){int id = str[i] - 'a';if(p -> next[id] == NULL){q = (Tree *) malloc(sizeof(root));q -> v = 1;for(int j = 0 ;j < 26 ;j ++)q -> next[j] = NULL;p -> next[id] = q;p = p -> next[id];}else{p -> next[id] -> v ++;p = p -> next[id];}}
}int Find(char *str)
{int len = strlen(str);Tree *p = &root;for(int i = 0 ;i < len ;i ++){int id = str[i] - 'a';p = p -> next[id];if(p == NULL) return 0;}return p -> v;
}int main ()
{char str[15];for(int i = 0 ;i < 26 ;i ++)root.next[i] = NULL;while(gets(str) && str[0] != '\0'){Buid_Tree(str);}while(~scanf("%s" ,str)){printf("%d\n" ,Find(str));}return 0;
}




hdu1251 hash或者字典树相关推荐

  1. hdu-1251(基本字典树)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...

  2. C++ __gnu_pbds(平板电视)超详细教程(C++内置的平衡树,字典树,hash)

    整理的算法模板合集: ACM模板 目录 一.平衡树 例题:luogu P3369 [模板]普通平衡树 1. `rb_tree_tag`版 2. `splay_tree_tag`版 功能不够?自己添加! ...

  3. hdu1247 字典树或者hash

    题意:      给你一些串,问你哪些串是由其他两个串连接成的. 思路:        我用了两种方法,一个是hash,hash的时候用map实现的,第二种方法是字典树,字典树我们枚举每个一字符串,查 ...

  4. Codeforces 861D - Polycarp's phone book 字典树/hash

    输入7e4个字符串,要求每个串提取一个子串来唯一表示 4s题可以hash暴力水过,大体思路就是把所有子串map自己的母串,过程中如果这个子串已有hash值就标-1 然后枚举map元素,维护最小化一下就 ...

  5. 字典树 ZOJ1109 HDU1251 PKU1204 HDU1075

    又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀 ...

  6. HDU1251 统计难题【字典树】

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...

  7. Trie(前缀树/字典树)及其应用

    from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...

  8. LeetCode Maximum XOR of Two Numbers in an Array(贪心、字典树)

    问题:给出一个非空的整数数组,找到最大的两个数的异或值.要求时间复杂度为O(n) 思路:根据二进制表示的前缀. 先求出最大数的位数,然后根据位数作位操作异或判断最大值.由于要求时间复杂度为O(n),在 ...

  9. hdu2482 字典树+spfa

    题意:       给你一个地图,地图上有公交站点和路线,问你从起点到终点至少要换多少次公交路线. 思路:       首先上面的题意说的和笼统,没说详细是因为这个题目叙述的很多,描述起来麻烦, 下面 ...

最新文章

  1. HDU2673-shǎ崽(水题)
  2. mysql防止从节点可写数据_mysql 主从数据不一致 Slave_SQL_Running: No 解决方法
  3. 智能车竞赛技术报告 | 基础四轮组 - 哈尔滨工程大学 - 济海追风5队
  4. 数学大神攻克猜字游戏Wordle,求解算法成绩逼近理论极限,连信息论都用上了...
  5. 面向对象笔记2 原型链 解释
  6. Confluence 6 复杂授权或性能问题
  7. oracle 基于备份 duplicate 没有目标连接,RMAN 概述及其体系结构
  8. 为特使建立控制平面的指南-识别组件
  9. c盘的Oracle文件删不了吗,oracle卸载不干净怎么办
  10. jggrid使用multiselect时修改默认排序
  11. 【kafka】kafka Group coordinator lookup for group
  12. 陆奇李开复余凯谈AI十年机遇,Hinton和LeCun会如何评价?
  13. 【iOS】Swift3:执行save()的时候出现:Call can throw, but it is not marked with 'try' and the error is not handl
  14. linux c 库依赖
  15. HotSpot虚拟机的垃圾收集算法实现
  16. 论文阅读-A Fast Learning Algorithm for Deep Belief Nets
  17. python英语词汇读音_利用PYTHON 爬虫爬出自己的英语单词库
  18. Linux Neptune界面,基于Debian Linux 的 Neptune 5.4发布啦
  19. 在PCB中快速找到原理图的原件
  20. matlab对于点云栅格化,并且提取路面(粗糙版)

热门文章

  1. 验证mongodb主从复制过程~记录操作
  2. Python出现SyntaxError: Non-ASCII character '\xe7' in file 错误的解决办法
  3. Axure 6.5 RP下载,汉化
  4. linux的引导流程
  5. 转:Linux查看CPU信息、机器型号等硬件信
  6. 正则表达式限制文本框只能输入数字,小数点,英文字母,汉字
  7. 为什么阿里巴巴建议集合初始化时,指定集合容量大小
  8. 操作系统 chapter 12 死锁
  9. Uva 232.Crossword Answers
  10. BZOJ 3685: 普通van Emde Boas树( 线段树 )