T9 HDU1298
就是字典树加dfs
把所有操作封在结构体里面
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream> using namespace std; const int maxn = 1e5 + ; char dic[][] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
int n, w, p, m, P;
char s[], num[], Find[], ans[]; struct Trie
{
int pos;
int tree[maxn][];
int val[maxn]; void clear()
{
pos = ;
memset(tree[], , sizeof(tree[]));
memset(val, , sizeof(val));
} int idx(char c)
{
return c - 'a';
} void insert(char *s, int v)
{
int root = , n = strlen(s);
for(int i = ; i < n; i++)
{
int ch = idx(s[i]);
if(!tree[root][ch])
{
memset(tree[pos], , sizeof(tree[pos]));
tree[root][ch] = pos++;
} root = tree[root][ch];
val[root]+=v;
}
} void query(int cur, int len, int u)
{
if(cur == len && val[u] > P)
{
P = val[u];
for(int i = ; i < len; i++)
{
Find[i] = ans[i];
Find[len] = '\0';
}
return ;
}
int id = num[cur] - '';
for(int i = ; dic[id][i]; i++)
{
int c = idx(dic[id][i]);
if(!tree[u][c])
continue;
ans[cur] = dic[id][i];
query(cur+, len, tree[u][c]);
}
return ;
}
}trie; int main()
{
int flag = ;
int T;
scanf("%d", &T);
while(T--)
{
trie.clear();
printf("Scenario #%d:\n", flag++);
scanf("%d", &w);
for(int i = ; i < w; i++)
{
scanf("%s%d", s, &p);
trie.insert(s, p);
}
scanf("%d", &m);
for(int i = ; i < m; i++)
{
scanf("%s", num);
int len = strlen(num);
for(int j = ; j < len; j++)
{
P = ;
trie.query(, j, );
if(P>)
puts(Find);
else
puts("MANUALLY");
}
puts("");
}
puts("");
}
}
T9 HDU1298的更多相关文章
- hdu1298 T9(手机输入法,每按一个数字,找出出现频率最高的字串,字典树+DFS)
Problem Description A while ago it was quite cumbersome to create a message for the Short Message Se ...
- POJ 1451 T9
T9 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3083 Accepted: 1101 Description Ba ...
- http://blog.csdn.net/bluejoe2000/article/details/39521405#t9
http://blog.csdn.net/bluejoe2000/article/details/39521405#t9
- hdu 1298 T9(特里+DFS)
pid=1298" target="_blank" style="">题目连接:hdu 1298 T9 题目大意:模拟手机打字的猜想功能.依据概 ...
- T9
T9 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission ...
- POJ 1451 - T9 - [字典树]
题目链接:http://bailian.openjudge.cn/practice/1451/ 总时间限制: 1000ms 内存限制: 65536kB 描述 Background A while ag ...
- HDU1298 字典树+dfs
T9 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- HDU 1298 T9【字典树增加||查询】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1298 T9 Time Limit: 2000/1000 MS (Java/Others) Memo ...
- 玩爆你的手机联系人--T9搜索(一)
自己研究了好几天联系人的T9搜索算法, 先分享出来给大家看看. 欢迎不吝赐教.假设有大神有更好的T9搜索算法, 那更好啊,大家一起研究研究,谢谢. 第一部分是比較简单的获取手机联系人. 获取 ...
随机推荐
- java实现网页验证码
Servlet: package cn.bdqn.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletExceptio ...
- setTimeout设置不起作用
setTimeout立刻调用了 a()方法而不是xx秒以后,是因为调用方法时候没有加双引号. 正确做法:setTimeout(" a() ",5000): 调用 a() 方法时候要 ...
- jdk学习之如何调试jdk
自从sun被oracle收购后,在oracle下载的jdk使用F5进入调试jdk的方法就不行了,这对于想看jdk的源码的小伙伴是一个暴击(oracle在编译rt.jar时去除了调试信息): 这不得不鼻 ...
- [C++]数组与指针(纯代码-复习用)
#include<iostream> #include<cmath> //C++ //#include<math.h> //C #include<ctime& ...
- mysql select 时间戳转标准时间写法
select FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S') as create_time from tabName
- Spring+SpringMVC+Mybatis整合(二)
目录结构:
- numpy 中 shape_base提供的tile方法
tile函数 来自于numpy.lib.shape_base 功能:重复某个数组. 比如说tile(A, n), 功能是将数组A重复n次,构成一个新的数组(行数只有1个) 比如说tile(A, n, ...
- L-BFGS算法(转载)
转载链接:http://blog.csdn.net/itplus/article/details/21897715 前面的拟牛顿法.DFP.BFGS.L-BFGS算法简短总结一下就是: 牛顿法不仅使用 ...
- 深入理解CMA【转】
转自:https://www.csdn.net/article/a/2016-07-07/15839383 摘要:连续内存分配(简称CMA) 是一种用于申请大量的,并且物理上连续的内存块的方法,在LW ...
- centos7版本设置OS启动默认进入图形界面还是文本界面
相比7之前的版本,在centos7版本中,设置OS启动默认进入图形界面还是文本界面有了点变化 检查当前默认设置 [root@rems2 ~]# systemctl get-default graphi ...