(。・`ω´・)智能手机
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
13 4466444874hooightmihgtgo
SampleOutput
220 代码(映射一下就好了,简单哈希):
1 #include2 #include 3 #include 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