思路

题意题目为中文题,这里不再过多阐述。

思路1:可以在读入单词表的过程中将单词分解,用map将它一 一记录

思路2:利用字典树,这个方法较快些,下面代码中会分别给出数组和结构体指针两种形式的字典树,指针形式的有时可能会因题目内存限制而导致Memory Limit Exceeded,这时就可选择数组形式的。不过对于本题来说不用担心。

AC代码

代码1:map打表

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. map<string, int> table;
  5. int main()
  6. {
  7. std::ios::sync_with_stdio(false);
  8. // freopen("input.txt", "r", stdin);
  9. // freopen("output.txt", "w", stdout);
  10. table.clear();
  11. string s;
  12. while(getline(cin, s))
  13. {
  14. if(s[0] == '\0')
  15. break;
  16. string ss = "";
  17. for(int i = 0; i < s.size(); i++)
  18. {
  19. ss += s[i];
  20. table[ss]++;
  21. }
  22. }
  23. while(cin >> s)
  24. {
  25. cout << table[s] << endl;
  26. }
  27. }

代码2:数组形式的字典树

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxnode = 400001;
  4. const int maxs = 27;
  5. char s[10 + 10];
  6. int trie[maxnode][maxs] ;
  7. int sum[maxnode] ;
  8. int node = 0;
  9. void inserts(char *t)
  10. {
  11. int len = strlen(t);
  12. int cur = 0;
  13. for(int i = 0; i < len; i++)
  14. {
  15. int p = t[i] - 'a';
  16. if(!trie[cur][p])
  17. trie[cur][p] = ++node;
  18. sum[trie[cur][p]]++;
  19. cur = trie[cur][p];
  20. }
  21. }
  22. int searchs(char *t)
  23. {
  24. int len = strlen(t);
  25. int cur = 0;
  26. for(int i = 0; i < len; i++)
  27. {
  28. int p = t[i] - 'a';
  29. if(!trie[cur][p])
  30. return 0;
  31. cur = trie[cur][p];
  32. }
  33. return sum[cur];
  34. }
  35. int main()
  36. {
  37. // freopen("input.txt", "r", stdin);
  38. // freopen("output.txt", "w", stdout);
  39. memset(trie, 0, sizeof(trie));
  40. memset(sum, 0, sizeof(sum));
  41. while(gets(s) != NULL)
  42. {
  43. if(s[0] == '\0')
  44. break;
  45. inserts(s);
  46. }
  47. while(scanf("%s", s) != EOF)
  48. {
  49. cout << searchs(s) << endl;
  50. }
  51. }

代码3:结构体指针形式的字典树

  1. //#include<bits/stdc++.h>
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. using namespace std;
  6. char s[10+10];
  7. struct Trie
  8. {
  9. Trie* next[26];
  10. int sum;
  11. Trie()
  12. {
  13. for(int i = 0; i < 26; i++)
  14. next[i] = NULL;
  15. sum = 0;
  16. }
  17. }root;
  18. void inserts(char *s)
  19. {
  20. Trie* p = &root;
  21. int len = strlen(s);
  22. for(int i = 0; i < len; i++)
  23. {
  24. int cur = s[i] - 'a';
  25. if(p->next[cur] == NULL)
  26. {
  27. p->next[cur] = new Trie;
  28. }
  29. p = p->next[cur];
  30. p->sum++;
  31. }
  32. }
  33. int finds(char *s)
  34. {
  35. Trie* p = &root;
  36. int len = strlen(s);
  37. for(int i = 0; i < len; i++)
  38. {
  39. int cur = s[i] - 'a';
  40. if(p->next[cur] == NULL)
  41. return 0;
  42. else
  43. p = p->next[cur];
  44. }
  45. return p->sum;
  46. }
  47. int main()
  48. {
  49. // freopen("input.txt", "r", stdin);
  50. // freopen("output.txt", "w", stdout);
  51. while(gets(s) != NULL)
  52. {
  53. if(s[0] == '\0')
  54. break;
  55. inserts(s);
  56. }
  57. while(scanf("%s", s) != EOF)
  58. {
  59. cout << finds(s) << endl;
  60. }
  61. }

【统计难题】【HDU - 1251】【map打表或字典树】【字典树模板】的更多相关文章

  1. AC日记——统计难题 hdu 1251

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

  2. 字典树模板题(统计难题 HDU - 1251)

    https://vjudge.net/problem/HDU-1251 标准的字典树模板题: 也注意一下输入方法: #include<iostream> #include<cstdi ...

  3. 统计难题 HDOJ --1251

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

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

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

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

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

  6. hdu 1251:统计难题[【trie树】||【map】

    <题目链接> 统计难题                        Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131 ...

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

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

  8. hdu 1251 统计难题(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 统计难题 Time Limit: 4000/2000 MS (Java/Others)    M ...

  9. [ACM] hdu 1251 统计难题 (字典树)

    统计难题 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单 ...

随机推荐

  1. Spark实战系列目录

    1 Spark rdd -- action函数详解与实战 2 Spark rdd -- transformations函数详解与实战(上) 3 Spark rdd -- transformations ...

  2. MySQL5.7修改wait_timeout参数

    参考:https://blog.csdn.net/ivory_town1/article/details/77702357 1.修改参数配置文件 vi /etc/my.cnf [mysqld] wai ...

  3. Vmware解决虚拟机不能联网的问题

    1. 设置为NAT模式 2. 启动win7的服务,命令窗口输入services.msc 回车 3. 修改Vmware的设置

  4. FinalShell—一体化服务器管理软件(SSH客户端)

    下面附上一些截图和官方连接: 官网:http://www.hostbuf.com/ FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发 ...

  5. Selenium+java - 操作滚动条

    前言 在写脚本时,总会遇到一种情况,就是当滚动拉倒最下面了,表单或者下拉框.按钮这些元素未在当前页面展示,而webdriver提供的方法都是操作当前页面可见的元素,这时我们使用JavaScript操作 ...

  6. imposm模块安装

    imposm安装 pip install imposm 报错,参考:https://imposm.org/docs/imposm/2.5.0/install.html 并安装依赖: sudo ap-g ...

  7. QQ联合登录(基于Oauth2.0协议)

    1. 获取授权码Authorization Code https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id= ...

  8. 深层目录文件复制,C# 递归,录音录像图片文件过多,用于测试程序

    /// <summary> /// 录音录像图片文件过多只复制目录的前几个文件,用于测试程序 /// d:\file/images/2019-10/01/01/xxxxx.jpg(前几个文 ...

  9. Java-手动搭建SSH(maven版)

    创建maven项目 把maven项目变为动态网站,步骤如下: 项目结构图如下: 开始搭建spring+springmvc+Hibernate项目 环境版本就不多说了,直接贴出pom.xml文件 < ...

  10. JDK提供的并发工具类

    1.CountDownLatch await(),进入等待的状态 countDown(),计数器减一 应用场景:启动三个线程计算,需要对结果进行累加. /** * * CountDownLatch D ...