HDU 1298 T9(字典树+dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1298
题意:
模拟手机9键,给出每个单词的使用频率。现在给出按键的顺序,问每次按键后首字是什么(也就是要概率最大的)。
思路:
先建立字典树算出每个前缀出现的概率,然后dfs每种情况,选择概率大的。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = *+; char s[],ans[],tmp[]; int n, num = , p;
int pheno[][] = {{,,},{,,},{,,},{,,},{,,},{,,,},{,,},{,,,}};
int key[] = {,,,,,,,}; struct Trie
{
int son[];
int cnt;
}t[maxn]; void init(int x)
{
t[x].cnt = ;
memset(t[x].son,,sizeof(t[x].son));
} void insert(char* s, int d)
{
int u = , n = strlen(s);
for(int i=;i<n;i++)
{
int c = s[i]-'a';
if(!t[u].son[c])
{
num++;
init(num);
t[u].son[c] = num;
}
u = t[u].son[c];
t[u].cnt += d;
}
} void dfs(int cur, int u, int len, char* s)
{
if(cur == len)
{
if(t[u].cnt > p)
{
p = t[u].cnt;
for(int i=;i<len;i++) ans[i] = tmp[i];
ans[len] = '\0';
}
return;
}
int k = s[cur]-'';
for(int i=;i<key[k];i++)
{
int c = pheno[k][i];
if(!t[u].son[c]) continue;
tmp[cur] = 'a'+ c;
dfs(cur+, t[u].son[c], len, s);
}
} int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
int kase = ;
while(T--)
{
init();
scanf("%d",&n);
for(int i =;i<n;i++)
{
scanf("%s%d",s,&p);
insert(s,p);
}
printf("Scenario #%d:\n",++kase);
int q; scanf("%d",&q);
while(q--)
{
scanf("%s",&s);
int len = strlen(s);
for(int i=;i<len-;i++)
{
p = ;
dfs(,,i+,s);
if(p) printf("%s\n",ans);
else puts("MANUALLY");
}
if(q) puts("");
}
printf("\n\n");
}
return ;
}
HDU 1298 T9(字典树+dfs)的更多相关文章
- HDU 1298 T9 字典树+DFS
必须要批评下自己了,首先就是这个题目的迟疑不定,去年做字典树的时候就碰到这个题目了,当时没什么好的想法,就暂时搁置了,其实想法应该有很多,只是居然没想到. 同样都是对单词进行建树,并插入可能值,但是拨 ...
- HDU 1298 T9 ( 字典树 )
题意 : 给你 w 个单词以及他们的频率,现在给出模拟 9 键打字的一串数字,要你在其模拟打字的过程中给出不同长度的提示词,出现的提示词应当是之前频率最高的,当然提示词不需要完整的,也可以是 w 个单 ...
- hdu 1298 T9(特里+DFS)
pid=1298" target="_blank" style="">题目连接:hdu 1298 T9 题目大意:模拟手机打字的猜想功能.依据概 ...
- hdu 1298 T9
字典树+DFS. #include<cstdio> #include<cstring> #include<cmath> #include<string> ...
- hdu 1298 字典树 + DFS (模拟T9文本输入)
题意: 给你一些按键顺序,让你输出每一步中概率最大的那个单词,这里的概率计算方 法好好看看别弄错了,一开始就是因为弄错了,各种wa,比如 abc 1 ,ab 1,那么 ab 的概率就是2 ...
- HDU 1298 T9【字典树增加||查询】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1298 T9 Time Limit: 2000/1000 MS (Java/Others) Memo ...
- HDU 6191 2017ACM/ICPC广西邀请赛 J Query on A Tree 可持久化01字典树+dfs序
题意 给一颗\(n\)个节点的带点权的树,以\(1\)为根节点,\(q\)次询问,每次询问给出2个数\(u\),\(x\),求\(u\)的子树中的点上的值与\(x\)异或的值最大为多少 分析 先dfs ...
- hdu多校第五场1002 (hdu6625) three arrays 字典树/dfs
题意: 给你两个序列a,b,序列c的某位是由序列a,b的此位异或得来,让你重排序列ab,找出字典序最小的序列c. 题解: 如果能找到a,b序列中完全一样的值当然最好,要是找不到,那也尽量让低位不一样. ...
- HDU1298 字典树+dfs
T9 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
随机推荐
- windows下cmd清屏命令cls
windows下cmd清屏命令cls
- python 爬虫基础知识一
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 网络爬虫必备知识点 1. Python基础知识2. P ...
- how to backup your system of Autel MS908 Pro
how to backup your system of Autel Scan Tool Autel MS908 Pro: Connect the tablet to a PC desktop or ...
- Python+OpenCV图像处理(五)—— 像素运算
最近在忙毕业设计,只能偶尔更新博客........ 一.像素的算术运算 像素的算术运算涉及加减乘除等基本运算(要进行算术运算,两张图片的形状(shape)必须一样) 代码如下: #像素的算术运算(加. ...
- Prometheus监控学习笔记之prometheus的federation机制
0x00 概述 有时候对于一个公司,k8s集群或是所谓的caas只是整个技术体系的一部分,往往这个时候监控系统不仅仅要k8s集群以及k8s中部署的应用,而且要监控传统部署的项目.也就是说整个监控系统不 ...
- PyCharm配置MySQL
有时候电脑没有安装Navicat,也想要操作数据库,那么PyCharm也能实现Navicat的一些功能.下面演示,用PyCharm如何连接数据库并执行操作: 1. 打开PyCharm,在右侧边栏打开D ...
- DDoS防御方案
转自:http://netsecurity.51cto.com/art/201211/368930.htm 深入浅出DDoS攻击防御应对篇:DDoS防御方案 谈到DDoS防御,首先就是要知道到底遭受了 ...
- 关于__declspec(dllexport)
windows下dll动态库函数的导入与导出. __declspec Microsoft Specific __declspec ( extended-attribute ) declarator l ...
- 一种基于 Numpy 的 TF-IDF 实现报告
一种基于 Numpy 的 TF-IDF 实现报告 摘要 本文使用了一种 state-of-the-art 的矩阵表示方法来计算每个词在每篇文章上的 TF-IDF 权重(特征).本文还将介绍基于 TF- ...
- Machine Learning - Andrew Ng - Coursera
Machine Learning - Andrew Ng - Coursera Contents 1 Notes 1 Notes What is Machine Learning? Two defin ...