码迷,mamicode.com
首页 > 移动开发 > 详细

(??`ω´?)智能手机

时间:2015-07-31 23:10:03      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

(??`ω´?)智能手机

TimeLimit: 2000/1000 MS (Java/Others)  MenoryLimit: 32768/32768 K (Java/Others)
64-bit integer IO format:%I64d
 
Problem Description
在大家都有手机的今天。我们必须熟悉手机上的智能英文输入法。具体地讲,数字按钮可对应于英文字母分别如下所示: 
  2 : a, b, c    3 : d, e, f    4 : g, h, i    5 : j, k, l    6 : m, n, o     
  7 : p, q, r, s  8 : t, u, v    9 : w, x, y, z 
当我们想输入字符串“ming”,我们需要按下数字键 9, 4, 6, 4,然后输入法会手机字典中选择,所有符合拼音的单词。 
现在,问题来了,给你N组数字键的按键顺序,以及M组字符串,根据每一组的数字键的按键顺序,可以拼凑出多少个单词、
Input
  第一行输入T,表示有T组测试案例,每组测试案例按照下述操作进行: 
  第一行输入两个整数r N (1 <= N <= 5000),和M (1 <= M <= 5000),表示有N组数字键的按键顺序和M组字符串。 
  接下来有N行,每一行输入不超过6位数的数字,表示一组按键顺序。 
  再下来有M行,每一行输入一串不超过6个字符的字符串。  
Output
   每组测试案例,根据所给的按键顺序,在M个字符串中,统计能够形成多少个匹配的字符串、 
SampleInput

1
3 4
46
64448
74
ho
oight
mihgt
go
SampleOutput
2
2
0

代码(映射一下就好了,简单哈希):
技术分享
 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 using namespace std;
 5 #define Max 1008611
 6 int Sign[Max];
 7 int To[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
 8 int Deal(char str[])
 9 {
10     int i,Sum=0,Len=strlen(str);
11     for(i=0;i<Len;i++)
12     {
13         Sum=Sum*10+To[str[i]-a];
14     }
15     return Sum;
16 }
17 int main()
18 {
19     int T,N,M,i,j;
20     int Num[5117];
21     char Str[5117];
22     scanf("%d",&T);
23     while(T--)
24     {
25         memset(Sign,0,sizeof(Sign));
26         scanf("%d%d",&N,&M);
27         for(i=0;i<N;i++)
28         {
29             scanf("%d",&Num[i]);
30         }
31         for(i=0;i<M;i++)
32         {
33             scanf(" %s",Str);
34             Sign[Deal(Str)]++;
35         }
36         for(i=0;i<N;i++)
37         {
38             printf("%d\n",Sign[Num[i]]);
39         }
40     }
41     return 0;
42 }
View Code

 

(??`ω´?)智能手机

标签:

原文地址:http://www.cnblogs.com/LWF5201314614/p/4693303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!