题目链接:点击打开链接

Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
 
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

注意:本题只有一组测试数据,处理到文件结束.

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

banana band bee absolute acm ba b band abc
 
Sample Output

2 3 1 0
Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
 
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

注意:本题只有一组测试数据,处理到文件结束.

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

banana band bee absolute acm ba b band abc
 
Sample Output

2 3 1 0
 

题意:Trie树模板题,统计出现次数,注意注释

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std;
const int maxn = 400000 + 20;
int tot;
char s[maxn];
int num[maxn] = {0};//前缀末尾编号为i的单词数量。
int trie[maxn][26];
//trie[i][j] = k表示编号为i的节点的第j个孩子(内容为j的孩子)是编号为k的节点
//编号为整棵树中的编号, 内容是值的编号,如小写字母的字典树中,'b'的编号为'b' - 'a' = 1; void insert(char s[]){//插入单词s
int root = 0;//从整颗字典树的根节点开始找起,整颗字典树的根节点的编号为0
int len = strlen(s);
for(int i = 0; i < len; i++){
int id = s[i] - 'a';
if(!trie[root][id]) trie[root][id] = tot++;//如果之前没有从root到id过,自己创建一个。
//tot为整棵树中的编号,为全局变量,编到几就是几
root = trie[root][id];//无论从root到id的边是否之前存在,下一步都要往下走
num[root]++;//每次沿字典树输入一个单词,都让相应编号的num++,方便输出以某字符串为前缀的单词数
}
} int find(char s[]){
//前缀查找函数,注意:查找前缀是否存在与查找单词是否存在不同!
//如:空字典树中插入apple , applese 存在前缀app,但是不存在单词app!
//如果要查找单词,对应的insert函数要加入一个bool的v[i]标志:编号i的节点是单词结束的标志,find函数怎么改你懂的
int root = 0;//依然是从根节点开始查找
int len = strlen(s);
for(int i = 0; i < len; i++){
int id = s[i] - 'a';
if(!trie[root][id]) return 0;
root = trie[root][id];
}
return num[root]; } int main(){ memset(trie, 0 , sizeof(trie));//初始化很重要
tot = 1; //上面insert中为 tot++ , 所以这里应该初始化为1
while(gets(s)){//只有gets才能在遇到回车的时候返回长度为0的空串,gets同时也能记录空格
if(strcmp(s,"")==0) break;//学会此处的输入方法:若字符串长度为0或者输入的为空格,结束循环.
//strcmp(str1, str2) 若str1 == str2返回0, 若前者字典序大,返回正数, 否则返回负数
insert(s); }
//for(int i = 0; i < tot; i++)printf("num[%d]:%d\n", i, num[i]);
//for(int i = 0; i < tot; i++)for(int j = 0; j < 26; j++) if(trie[i][j])printf("trie[%d][%c] = %d\n", i, j+'a', trie[i][j]);
while(~scanf("%s",s)){
printf("%d\n", find(s));
}
return 0;
}

HDU 1251 统计难题 (Trie树模板题)的更多相关文章

  1. hdu 1251 统计难题 (字典树入门题)

    /******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...

  2. hdu 1251 统计难题 字典树第一题。

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

  3. HDU - 1251 统计难题(trie树)

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

  4. HDU 1251 统计难题 字典树大水题

    今天刚看的字典树, 就RE了一发, 字典树原理还是很简单的, 唯一的问题就是不知道一维够不够用, 就开的贼大, 这真的是容易MLE的东西啊, 赶紧去学优化吧. HDU-1251 统计难题 这道题唯一的 ...

  5. hdu 1251 统计难题(trie树入门)

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

  6. hdu -1251 统计难题(字典树水题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1251 建树之后 查询即可. G++提交 ME不知道为什么,c++就对了. #include <iostre ...

  7. HDU 1251 统计难题(Trie)

    统计难题 [题目链接]统计难题 [题目类型]Trie &题解: Trie的模板题,只不过这题坑点在没给数据范围,改成5e5就可以过了,用的刘汝佳蓝书模板 &代码: #include & ...

  8. hdu 1251 统计难题 (字典树(Trie)<PS:C++提交不得爆内存>)

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

  9. hdu 1251 统计难题 trie入门

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

  10. HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)

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

随机推荐

  1. 12.pyecharts详细使用教程

    官方数据教程: 柱状图-Bar //导入柱状图-Bar from pyecharts import Bar //设置行名 columns = ["Jan", "Feb&q ...

  2. Ubuntu1804下安装Gitab

    部署gitlab 1.配置仓库源 # vim /etc/apt/sources.listdeb http://mirrors.aliyun.com/ubuntu/ bionic main restri ...

  3. Ubuntu TTY 字体大小 目录颜色 中文乱码 设置

    TTY有很多不舒服的地方,没有中文 目录是深蓝色的看不清楚 字太小. 通过设置让终端更舒服一些. 进入TTY 从桌面进入TTY: 按`Ctrl+Alt+F[1-9] 有的版本图形界面在F7和F8,有的 ...

  4. python文档字符串(函数使用说明)

    关键字: 函数说明.help()函数 1.效果图: 2.代码: # 文档字符串( doc str) 是 函数使用说明 # 用法: 在函数第一行写一个字符串 def fn(*nums): ''' 函数的 ...

  5. 【xinsir】webpack实践

    webpack现在是前端必会的技能了,也是在工作中必定用到的.所以,如果我们现在还不会webpack,那么在将来面试中肯定会被扣分的. webpack中文官网:https://www.webpackj ...

  6. Go 每日一库之 cobra

    简介 cobra是一个命令行程序库,可以用来编写命令行程序.同时,它也提供了一个脚手架, 用于生成基于 cobra 的应用程序框架.非常多知名的开源项目使用了 cobra 库构建命令行,如Kubern ...

  7. 遗传编程GP-地图路径寻路

    本文介绍的是基于GP,并非A*算法,算是另类实现吧. 先看看地图定义,在文本文件中定义如下字符串,代表30列11行大小的地图 初始位置在左上角(0,0) ,值为1的是允许走的通的路,目标位置为右下角( ...

  8. Rainbow Plan团队项目第一次作业——项目计划

    团队项目--Rainbow Plan英语学习App 1.团队简介 1.1团队名称:Rainbow Plan (彩虹计划) 1.2团队成员: 队员学号 队员姓名 201731024235 何继武(组长) ...

  9. Math.Atan2 方法

    返回正切值为两个指定数字的商的角度. public static double Atan2 ( double y, double x ) 参数 y 点的 y 坐标. x 点的 x 坐标. 返回值 角  ...

  10. Java容器解析系列(17) LruCache详解

    在之前讲LinkedHashMap的时候,我们说起可以用来实现LRU(least recent used)算法,接下来我看一下其中的一个具体实现-----android sdk 中的LruCache. ...