MiYu原创, 转帖请注明 : 转载自 ______________白白の屋  

题目地址:

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

题目描述:

统计难题

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)
Total Submission(s): 5025    Accepted Submission(s): 1853

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 树, 教程很容易看明白, 1251 是一道很明显的 模板题, 看过 PPT 后 直接敲代码 1A.

第一次做, 顺便介绍下 trie树 :

字典树(Trie)是一种用于快速字符串检索的多叉树结构。其原理是利用字符串的公共前缀来降低时空开销,从而达到提高程序效率的目的。

  它有如下简单的性质:

    (1) 根节点不包含字符信息;

    (3) 一棵m度的Trie或者为空,或者由m棵m度的Trie组成。

   搜索字典项目的方法为:

    (1) 从根结点开始一次搜索;

    (2) 取得要查找关键词的第一个字母,并根据该字母选择对应的子树      并转到该子树继续进行检索;

    (3) 在相应的子树上,取得要查找关键词的第二个字母,

      并进一步选择对应的子树进行检索。

    (4) 迭代过程……

    (5) 在某个结点处,关键词的所有字母已被取出,则读取

      附在该结点上的信息,即完成查找。

代码如下 :

当然也可以拿来做模板 , 

/*

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

http://www.cnblog.com/MiYu

Author By : MiYu

Test      : 1

Program   : 1251

*/

#include <iostream>

using namespace std;

typedef struct dict DIC;

struct dict {

dict (){ n = 0; memset ( child , 0 , sizeof ( child ) ); }

void insert ( char *ins )

{

DIC *cur = this,*now;

int len = strlen ( ins );

if ( len == 0 )  return ;

for ( int i = 0; i != len; ++ i )

{

if ( cur->child[ ins[i] - 'a' ] != NULL )

{

cur = cur->child[ ins[i] - 'a' ];

cur->n ++;

}

else

{

now = new DIC;

cur->child[ ins[i] - 'a' ] = now;

now->n ++;

cur = now;

}

}

}

int find ( char *ins )

{

DIC *cur = this;

int len = strlen ( ins );

if ( 0 == len )  return 0;

for ( int i = 0; i != len; ++ i )

{

if ( cur->child[ ins[i] - 'a' ] != NULL )

cur = cur->child[ ins[i] - 'a' ];

else

return 0;

}

return cur->n;

}

private:

DIC *child[26];

int n;

};

char word[11];

int main ()

{

DIC dict;

while ( gets ( word ), strcmp ( word, "") != 0 )

dict.insert ( word );

char qur[11];

while ( scanf ( "%s",qur ) != EOF )

{

printf ( "%d\n",dict.find ( qur ) );

}

return 0;

}

转载于:https://www.cnblogs.com/MiYu/archive/2010/08/23/1806268.html

HDOJ 1251 HDU 1251 统计难题 ACM 1251 IN HDU相关推荐

  1. HDOJ 2526 HDU 2526 浪漫手机 ACM 2526 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋   题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2526 题目描述: ...

  2. HDOJ HDU 1709 The Balance ACM 1709 IN HDU

    //MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址 :          http://acm.hdu.edu.cn/showproblem.php?pid=1 ...

  3. HDU 1251 统计难题(Trie模版题)

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

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

    1 /******************************************************* 2 题目: 统计难题 (hdu 1251) 3 链接: http://acm.hd ...

  5. HDU 1251 统计难题 字典树/STL

    统计难题 Time Limit:2000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Description Ig ...

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

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

  7. HDU 1251 统计难题

    简单字典树  这是我初次接触字典树,代码的效率还不是很高,有什么建议,敬请指教 题目: 统计难题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写 ...

  8. hdu 1251统计难题

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

  9. HDU1251 统计难题 【trie树】

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

  10. hdu1251(统计难题)

    这题就是一个字典树的模板题 统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Othe ...

最新文章

  1. 如何征服Webpack 4并构建一个出色的React应用
  2. 都996了,需求还是没法按时交付,怎么办?
  3. win10只有c盘怎么分区_磁盘分区:系统C盘空间不足怎么办?
  4. EXPLAIN 命令详解
  5. 混编ObjectiveC++
  6. dockerfile安装yum_Docker镜像-基于DockerFile制作yum版nginx镜像
  7. 【Microstation】第一章:Microstation三维模型构建概述
  8. 实现树状结构_组合模式 - 树状结构的优雅实现
  9. html5-table布局
  10. HTML5网站大观:10个精美的 HTML5 企业网站欣赏
  11. 经典排序算法(八)--选择排序Selection Sort
  12. python 类的细节
  13. CCS历代版本下载地址以及6.0以上版本添加软件仿真
  14. FastDFS原理介绍
  15. HTML实现W3school导航栏(附带重置样式表reset.css)
  16. 关于指针的面试题,指向字符串和字符数组的单指针,二级指针,三级指针的使用。
  17. java身份证号码验证
  18. 库存管理系统 mysql_access数据库库存管理系统
  19. 如何优雅的创建一个Java不可变对象类,JDK源码中也是这么干的!
  20. canvas实现简单进度条

热门文章

  1. leetcode 148. Sort List ----- java
  2. 无极灯与LED灯将在短期内合力淘汰传统光源
  3. [原创]Datagrid和Button控件
  4. Java日常干货-观察者模式
  5. 1.5(java学习笔记)this关键字
  6. Bzoj1324 Exca王者之剑
  7. 解决Cell重用问题
  8. CLR Via CSharp读书笔记(11):事件
  9. 3.用户画像:方法论与工程化解决方案 --- 标签数据存储
  10. 9.企业安全建设入门(基于开源软件打造企业网络安全) --- SOC系统建设