HDU 1298 T9 ( 字典树 )
题意 : 给你 w 个单词以及他们的频率,现在给出模拟 9 键打字的一串数字,要你在其模拟打字的过程中给出不同长度的提示词,出现的提示词应当是之前频率最高的,当然提示词不需要完整的,也可以是 w 个单词出现最多次数的前缀。
分析 : 利用字典树存储这 w 个单词,然后给每一个结点的权值赋上其单词出现频率,接下来的工作就简单多了,只要暴力枚举模拟输入的数字键盘可能产生的单词组合,然后保存频率最高的那个即可!
#include<string.h> #include<stdio.h> #include<malloc.h> #include<iostream> #include<algorithm> #include<map> using namespace std; ; , n, m; const int INF = 0x3f3f3f3f; ]{ ///模拟数字键盘,因为是从2开始,所以0和1都赋值上一个'@'代表空 {'@','@','@','@','@'}, {'@','@','@','@','@'}, {'a','b','c','@','@'}, {'d','e','f','@','@'}, {'g','h','i','@','@'}, {'j','k','l','@','@'}, {'m','n','o','@','@'}, {'p','q','r','s','@'}, {'t','u','v','@','@'}, {'w','x','y','z','@'} }; struct Trie { Trie *Next[maxn]; int v; inline void init(const int val){ this->v = val; ; i<maxn; i++) this->Next[i] = NULL; } }; Trie *root; void CreateTrie(char *str, int val) { int len = strlen(str); Trie *p = root, *tmp; ; i<len; i++){ int idx = str[i]-'a'; if(p->Next[idx] == NULL){ tmp = (Trie *)malloc(sizeof(Trie)); tmp->init(val); p->Next[idx] = tmp; }else (p->Next[idx]->v) += val;///赋上频率权值 p = p->Next[idx]; } } inline void DelTrie(Trie *T) { if(T == NULL) return ; ; i<maxn; i++){ if(T->Next[i] != NULL) DelTrie(T->Next[i]); } free(T); return ; } ], ans[], now[]; int tmp, MaxVal; void DFS(int pos, int len, Trie *NOD) { if(pos == len){///递归出口,看看频率是否更优,更新答案 if(NOD->v > MaxVal){ strcpy(ans, now); MaxVal = NOD->v; } return ; } '; ; mp[idx][i]!='@'; i++){///枚举这个数字建的所有字母,遇到'@'结束 int id = mp[idx][i] - 'a'; if(NOD->Next[id]){ ///如果字典树关于这个字母的节点不为空的话,则进一步搜索 now[pos] = mp[idx][i];///now是保存一下暂时现在构造出来的字符串,以便更新 now[pos+] = '\0'; DFS(pos+, len, NOD->Next[id]);///进一步搜索 } } } int main(void) { int nCase; scanf("%d", &nCase); ; Case<=nCase; Case++){ root = (Trie *)malloc(sizeof(Trie)); root->init(); scanf("%d", &n); int tmpVal; ; i<n; i++){ scanf("%s %d", str, &tmpVal); CreateTrie(str, tmpVal); } printf("Scenario #%d:\n", Case); scanf("%d", &m); ; i<m; i++){ scanf("%s", str); int len = strlen(str); ; j<len; j++){///枚举长度 MaxVal = -INF; DFS(, j, root); if(MaxVal == -INF) puts("MANUALLY"); else puts(ans); } puts(""); }puts(""); DelTrie(root); } ; }
HDU 1298 T9 ( 字典树 )的更多相关文章
- HDU 1298 T9 字典树+DFS
必须要批评下自己了,首先就是这个题目的迟疑不定,去年做字典树的时候就碰到这个题目了,当时没什么好的想法,就暂时搁置了,其实想法应该有很多,只是居然没想到. 同样都是对单词进行建树,并插入可能值,但是拨 ...
- hdu 1298 T9(特里+DFS)
pid=1298" target="_blank" style="">题目连接:hdu 1298 T9 题目大意:模拟手机打字的猜想功能.依据概 ...
- HDU 1298 T9【字典树增加||查询】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1298 T9 Time Limit: 2000/1000 MS (Java/Others) Memo ...
- HDU 1298 T9(字典树+dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1298 题意:模拟手机9键,给出每个单词的使用频率.现在给出按键的顺序,问每次按键后首字是什么(也就是要概率最大的 ...
- POJ 1451 - T9 - [字典树]
题目链接:http://bailian.openjudge.cn/practice/1451/ 总时间限制: 1000ms 内存限制: 65536kB 描述 Background A while ag ...
- hdu 1979 DFS + 字典树剪枝
http://acm.hdu.edu.cn/showproblem.php?pid=1979 Fill the blanks Time Limit: 3000/1000 MS (Java/Others ...
- hdu 2846(字典树)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 2846 Repository (字典树 后缀建树)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU 1671 (字典树统计是否有前缀)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Problem Description Given a list of phone number ...
随机推荐
- swagger 访问格式
boot工程格式如下 http://10.166.10.169:8085/swagger-ui.html 非boot工程加个自己项目名 http://10.166.10.169:8085/xxx/sw ...
- 第9周总结&实验报告7
完成火车站售票程序的模拟. 要求:(1)总票数1000张:(2)10个窗口同时开始卖票:(3)卖票过程延时1秒钟:(4)不能出现一票多卖或卖出负数号票的情况.一:实验代码 package first; ...
- new 和 malloc 的区别 及使用
Malloc: 定义上:malloc memory allocation 动态内存分配 是c中的一个函数 使用方法: extern void *malloc(unsigned int num_byt ...
- C++中构造函数的手动和自动调用方式
1,对象的构造通过构造函数来完成,和类名相同且没有返回值,这个时候只有参 数一个特性,构造函数可以自定义参数,这个参数一般而言就是对类进行初始 化来使用的:带有参数的构造函数的意义在于可以使得每 ...
- 初次尝试python爬虫,爬取小说网站的小说。
本次是小阿鹏,第一次通过python爬虫去爬一个小说网站的小说. 下面直接上菜. 1.首先我需要导入相应的包,这里我采用了第三方模块的架包,requests.requests是python实现的简单易 ...
- spark性能调优03-shuffle调优
1.开启map端输出文件的合并机制 1.1 为什么要开启map端输出文件的合并机制 默认情况下,map端的每个task会为reduce端的每个task生成一个输出文件,reduce段的每个task拉取 ...
- 解决arcgis10.5直连postgresql报错
软件版本: arcgis10.5 postgresql9.5.9 最近使用desktop直连postgresql,已经拷贝了类库文件到desktop及pgsql配置完成的前提下,但还是报以下错误: 解 ...
- [译]送给 ES6 开发者的7个 hack
关注原来的 JavaScript hacks,上面有一些新的好东西.2018 使用 JavaScript 写代码真的又变得有意思了! Hack #1 — 交换变量 使用数组结构来交换值 let a = ...
- 使用pdfjs插件在线预览PDF文件
前言 本文介绍在html中使用 pdfjs插件在线预览PDF文件的方法. 实现步骤 下载 pdfjs 并引入项目中 到PDFJS官网 http://mozilla.github.io/pdf.js/g ...
- 设计模式开闭原则--java
静态工厂模式 + 反射控制入参范围 public interface IPrinter { void print(); } public class CanonPrinter implements I ...