传送门 (<---可以点击的~)

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

描述

有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里面找出某个后缀的单词个数。

输入

输入有多组数据。
每组第一行输入n,m,0<=n,m<=100000,
第二行到n+1行:输入单词,每个单词仅有小写英文字母组成,长度不超过10。
第n+2行到n+m+1行,输入要找的单词后缀。

输出

在n个单词里面找出输入单词后缀的单词个数,然后输出。每个数据与数据之间换行。

样例输入

6 3
someone
everyone
outside
inside
somebody
nobody
one
side
body

样例输出

2
2
2

思路:既然是求后缀个数,把字符串倒一倒就变求前缀个数了,然后就是写字典树。这题的话,map瞎搞也是能过的,耗时在800MS左右(感觉还是老老实实字典树吧~)

    拿来练字典树模板的。

字典树代码:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7. typedef long long LL;
  8. char str[];
  9. struct note{
  10. note* nxt[];
  11. int sum;//保存出现个数
  12. note(){
  13. sum = ;
  14. memset(nxt,,sizeof(nxt));
  15. }
  16. }a[];
  17. void insert(note *root,char s[]){
  18. note *p = root;
  19. int i = ;
  20. while(s[i]){
  21. int j = s[i++] - 'a';
  22. if(p->nxt[j] ==NULL){
  23. p->nxt[j] = new note();
  24. }
  25. p = p->nxt[j];
  26. (p->sum) ++;//在构建的时候直接把当前结点的sum+1 说明出现过后缀
  27. }
  28. }
  29. int search(note *root ,char s[]){
  30. note *p = root;
  31. int i = ;
  32. while(s[i]){
  33. int j = s[i++]-'a';
  34. if(p->nxt[j] == NULL)return ;
  35. p = p -> nxt[j];
  36. }
  37. return p -> sum;
  38. }
  39. int main(){
  40. int n,m;
  41. while(~scanf("%d %d",&n,&m)){
  42. note * root = new note();
  43. while(n--){
  44. scanf("%s",str);
  45. strrev(str);
  46. insert(root,str);
  47. }
  48. while(m--){
  49. scanf("%s",str);
  50. strrev(str);
  51. printf("%d\n",search(root,str));
  52. }
  53. }
  54. return ;
  55. }

map代码:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<string>
  6. #include<cstdlib>
  7. #include<cmath>
  8. #include<stack>
  9. #include<vector>
  10. #include<map>
  11. #include<queue>
  12. #include <sstream>
  13. #define LL long long
  14. using namespace std;
  15. map<string,int>ma;
  16. int main(){
  17. int n,m;
  18. string s;
  19. char str[];
  20. while(~scanf("%d%d",&n,&m)){
  21. ma.clear();
  22. while(n--){
  23. cin>>s;
  24. reverse(s.begin(),s.end());
  25. while(s.size()>){
  26. ma[s]++;
  27. s.erase(s.size()-);
  28. }
  29. }
  30. while(m--){
  31. scanf("%s",str);strrev(str);
  32. printf("%d\n",ma[str]);
  33. }
  34. }
  35. }

TOJ3097: 单词后缀 (字典树 or map瞎搞)的更多相关文章

  1. BZOJ 4236: JOIOJI map瞎搞

    分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1 ...

  2. BestCoder Round #92 1001 Skip the Class —— 字典树 or map容器

    题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=748&pid=1001 题解: 1.trie树 关 ...

  3. HDU-1251 统计难题,字典树或者map!

    统计难题 很久就看过这个题了,但不会~~~不会~~ 题意:给出一张单词表,然后下面有若干查询,每次给出一个单词,问单词表中是否存在以这个单词为前缀的单词,输出数量.本身也是自身的前缀.只有一组数据! ...

  4. poj 2503 Babelfish(字典树或map或哈希或排序二分)

    输入若干组对应关系,然后输入应该单词,输出对应的单词,如果没有对应的输出eh 此题的做法非常多,很多人用了字典树,还有有用hash的,也有用了排序加二分的(感觉这种方法时间效率最差了),这里我参考了M ...

  5. POJ2945(Find the Clones)--字典树,map

    题意:给你n个规定长度的单词,问你其中出现了1次的单词,出现两次的单词...出现n次单词分别有多少个. 当然这题map也能过,但是这里介绍字典树的做法. 首相对于n个单词存入树中,当然建树过程中遇到一 ...

  6. hdu1251 字典树or map

    一道字典树的题,不过看起来用map更为简单 传送门 题意: 给出一堆字符串构成一个字典,求字典里以某字符串为前缀的字符串有几个 思路: 输入字符串时把字符串的前缀全部存进map并标记次数 查询时直接输 ...

  7. HihoCoder1366 逆序单词(字典树)

    逆序单词 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在英文中有很多逆序的单词,比如dog和god,evil和live等等. 现在给出一份包含N个单词的单词表,其中每 ...

  8. hdu2072 单词数 字典树

    字典树裸题 #include<stdio.h> #include<string.h> ][]; ]; int cnt; int ans; void Insert(char *w ...

  9. Java实现 LeetCode 720 词典中最长的单词(字典树)

    720. 词典中最长的单词 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最 ...

随机推荐

  1. DDD随笔-Axon

    1. 命令处理程序从存储库中检索域对象(聚合)并执行它们的方法来更改它们的状态.这些聚合通常包含实际的业务逻辑,因此负责维护自己的状态.聚合的状态变化导致产生领域事件.领域事件和聚合形成领域模型. 2 ...

  2. ASP.NET 使用alert弹出对话框后,CSS样式失效,字体变大的解决方法

    protected void ASPxButton2_Click(object sender, EventArgs e) { //Response.Write("<script> ...

  3. Phabricator代码审核Audit用户指南

    作者: shaneZhang 分类: 互联网技术 发布时间: 2015-07-04 13:37 概览 Phabricator支持两种代码审查工作流:“review”(提交前审查)和 “audit”(提 ...

  4. JEECG-P3首个开源插件诞生!CMS网站插件 Jeecg-p3-biz-cms1.0版本发布!

    Jeecg-P3-Biz-Cms   ( JEECG 首个微服务插件,支持小程序的CMS系统) 是基于JEECG-P3 微服务框架开发的CMS建站系统,可轻量级集成进jeecg系统,定制各类网站模板, ...

  5. maven的环境变量配置

    一: 首先下载maven, 下载地址:http://maven.apache.org/download.html 打开这个连接:选择File下面的apache-maven-3.2.1-bin.zip链 ...

  6. 高德地图 API 计算两个城市之间的距离

    1. 目前在项目中,遇到一个需求不会做,就是要计算两个城市之间的距离,而这两个城市的输入是可变的,如果要使用数据库来先存储两地之间的距离,调用的时候再来调用,那么存数据的时候,要哭的,因为光是省级区域 ...

  7. jquery 设计的扩展---初级

    1. 写一个构造函数G,调用G 时,返回G上的fn 对象的init() 的实例 2.设置G.fn 的指向,使用G.fn 与G.prototype指向同一个对象 2.1 重写G.prototype 对象 ...

  8. 手工获取AWR报告

    AWR(Automatic Workload Repository)报告常用于Oracle数据库性能分析.熟练解读AWR报告有助于快速分析Oracle性能问题.下面主要描述如何手工获取AWR报告. 操 ...

  9. JAVAWEB 一一 fmt标签 和日期插件

    fmt标签 效果 操作:  ①导入标签 <%@ taglib uri=httpjava.sun.comjspjstlfmt prefix=fmt %> ②标签这么写 <td>& ...

  10. JAVAWEB 一一 SpringMVC(注解)

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...