题意:就是让你模拟手机输入单词。具体就是给你一些单词,以及该单词被使用的频数,这个频数也是该单词前缀的使用频数,当然不同的单词有可能有相同的前缀,那么这个相同的前缀的使用频数就是这两个单词使用频数之和,以此类推。然后再给你一些数字串,让你针对该数字串的每一个前缀输出它的最有可能对应的单词(即频数最大的字符串)。

解题思路:这道题目比我想象中的简单,直接dfs去搜,因为每个键的字母个数不超过5,所以不会TLE。。。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;struct node
{struct node *next[26];int p;node(){p = 0;for(int i = 0; i < 26; i++)next[i] = NULL;}
};
int n,pro;
char s[100],keyboard[10][5]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
char ans[100],tmp[100];void add(char *str,int cnt,node *root)
{node *t = root;for(int i = 0; str[i] != 0; i++){if(t->next[str[i]-'a'] == NULL){t->next[str[i]-'a'] = new node();}t = t->next[str[i]-'a'];t->p += cnt;}
}void dfs(int x,int pos,node *r)
{int num = s[pos] - '0';int len = strlen(keyboard[num]);for(int i = 0; i < len; i++){int t = keyboard[num][i] - 'a';if(r->next[t] == NULL) continue;else tmp[pos] = keyboard[num][i];if(pos == x){if(pro < r->next[t]->p){pro = r->next[t]->p;strcpy(ans,tmp);}}else dfs(x,pos+1,r->next[t]);}
}int main()
{int t,p,cas = 1;node *root;scanf("%d",&t);while(t--){root = new node();scanf("%d",&n);for(int i = 1; i <= n; i++){getchar();scanf("%s %d",s,&p);add(s,p,root);}printf("Scenario #%d:\n", cas++);scanf("%d",&n);for(int i = 1; i <= n; i++){getchar();scanf("%s",s);int len = strlen(s);for(int j = 0; j < len-1; j++){memset(tmp,0,sizeof(tmp));pro = 0;dfs(j,0,root);if(pro == 0)printf("MANUALLY\n\n");else printf("%s\n\n",ans);}}}return 0;
}

poj 1451(Trie)相关推荐

  1. poj 2001 trie

    第一道trie 还需要写题来建立自己的代码习惯. 1 #include <cstdio> 2 #include <vector> 3 #include <algorith ...

  2. poj 2503 Trie树

    典型的Trie树, 算是复习一下字符串吧, 就是输入有点恶心,代码如下: #include <cstdio> #include <cstring> #include <a ...

  3. POJ 1451 T9 (字典树好题)

    背景:为了方便九宫格手机用户发短信,希望在用户按键时,根据提供的字典(给出字符串和频数),给出各个阶段最有可能要打的单词. 题意: 首先给出的是字典,每个单词有一个出现频率.然后给出的是询问,每个询问 ...

  4. poj 1816 trie树+dfs(强烈推荐,含有通配符的匹配)

    这个题目花了我一晚上才调出来,其实也不难,就是在trie树上搜索给定的单词,但是麻烦的一点是考虑的情况非常多,比如模式串可能重复,或者*?连续出现,最开始都没考虑,程序敲出来直接提交一看WA,然后看d ...

  5. Poj 1451 JAVA 个人解题报告

    AC 时间 334ms,内存 3000k 题目大意: 模拟手机键盘的九宫格输入模式,每当输入单词,就会显示可能的单词, 根据每个单词的可能性. 这个可能性就是输入列表里跟随每个单词后面的那个正整数. ...

  6. HDOJ 1298 T9(trie树简单应用)

    题意: 一串数字,给出出现频率最高的那个单词. 思路: 字典树:首先是建树,其实最麻烦的是概率处理部分,因为题目给定的单词都是按照字典有序排列的,所以可以对于概率进行一遍预处理,然后建树的时候就可以直 ...

  7. POJ 3376 Finding Palindromes(扩展kmp+trie)

    题目链接:http://poj.org/problem?id=3376 题意:给你n个字符串m1.m2.m3...mn 求S = mimj(1=<i,j<=n)是回文串的数量 思路:我们考 ...

  8. poj 3321 Apple Trie

    /*poj 3321 Apple Trie这道题的关键是如何将一个树建成一个一维数组利用树状数组来解题!可以利用dfs()来搞定,我们在对一个节点深搜后,所经过的节点的数目就是该节点的子树的数目所以我 ...

  9. Trie:hdu 4825、1251、1247、Poj 3764

    hdu 4825链接 题目意思很简单,就是要求最大异或值的数. 我们可以从二进制的最高位开始选择,不断的排除一些数.我们先假设存在某些数字的二进制数是与当前查找的数不一样的,我们进入这一部分数进行查找 ...

最新文章

  1. 从一次react异步setState引发的思考
  2. 从exp入手分析漏洞
  3. python培训班时间 费用-广州python培训班收费标准
  4. android tools ignore,android 中tools:ignore=UselessParent这个属性的含义是什么?
  5. 用Apache Ivy实现项目里的依赖管理
  6. Jquery操作CSS常用方法
  7. HttpClient的性能隐患
  8. vector容器中重写sort方法
  9. python.day05
  10. (10)System Verilog 关联数组
  11. a标签加onclick点击事件
  12. 《MongoDB实战系列》系列文章导读
  13. Java算法-堆排序
  14. 华为手机解锁码计算工具_华为手机强制解锁工具
  15. 黑客是如何发现女朋友出轨的
  16. MySQL5.7 InnoDB官方文档中文版[猿教程]
  17. 无根树任意根深度加强版
  18. 看C++游戏程序员发展
  19. C++方式实现餐饮管理系统
  20. 职业规划:45岁之后,外企精英们去哪里?

热门文章

  1. 两种方式:mysql查看正在执行的sql语句
  2. Linux Kernel Development——列出系统中所有的进程
  3. Hive的HQL(2)
  4. 人活系列Streetlights (秩)
  5. mysql自增主键归零的方法
  6. JavaScript通过RegExp实现客户端验证
  7. BI推荐8款优秀的app
  8. Linux基础命令记录
  9. three ways for reducing the level of anxiety
  10. speech_to_text_demo powered by IBM!