Problem Description
We all use cell phone today. And we must be familiar with the intelligent English input method on the cell phone. To be specific, the number buttons may correspond to some English letters respectively, as shown below:
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

When we want to input the word “wing”, we press the button 9, 4, 6, 4, then the input method will choose from an embedded dictionary, all words matching the input number sequence, such as “wing”, “whoi”, “zhog”. Here comes our question, given a dictionary, how many words in it match some input number sequences?

 
Input
First is an integer T, indicating the number of test cases. Then T block follows, each of which is formatted like this:

Two integer N (1 <= N <= 5000), M (1 <= M <= 5000), indicating the number of input number sequences and the number of words in the dictionary, respectively. Then comes N lines, each line contains a number sequence, consisting of no more than 6 digits. Then comes M lines, each line contains a letter string, consisting of no more than 6 lower letters. It is guaranteed that there are neither duplicated number sequences nor duplicated words.

 
Output
For each input block, output N integers, indicating how many words in the dictionary match the corresponding number sequence, each integer per line.

 
Sample Input
1
3 5
46
64448
74
go
in
night
might
gn
 
Sample Output
3
2
0

题意与思路:

输入N个按键序列, 再输入M个单词, 要求我们对M个单词进行检索, 求出其按键序列

然后统计, N个按键序列每个分别出现了几次

错误点: 由于不注意严谨, 以为少写一个break没事, 导致超时~

我有两份代码, 一份是错误的, 还没找出错误来, 一份已AC;

AC代码:

#include<stdio.h>
#include<string.h> int t[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}; int T, N, M; int ans[5555];
char num[5555][10];
char word[5555][10]; void getans(char *p) {
int i, len;
int pos = 0;
char t_num[10];
len = strlen(p);
for(i = 0; i < len; i++)
t_num[pos++] = t[p[i]-'a'] + '0';
t_num[pos] = '\0';
for(i = 0; i < N; i++)
if(strcmp(t_num, num[i]) == 0) {
ans[i]++;
break;
}
} int main() {
scanf("%d", &T);
while(T--) {
int i;
scanf("%d %d", &N, &M); getchar(); memset(ans, 0, sizeof(ans));
for(i = 0; i < N; i++)
gets(num[i]);
for(i = 0; i < M; i++)
gets(word[i]); for(i = 0; i < M; i++)
getans(word[i]); for(i = 0; i < N; i++)
printf("%d\n", ans[i]);
}
return 0;
}

wrong代码:

#include<stdio.h>
#include<string.h> int T, N, M; char num[5555][10];
char word[5555][10];
int ans[5555]; char t[10][10]; void getans(char *p) {
int i, j, k, pos = 0;
char t_num[10];
int len1, len2;
len1 = strlen(p);
for(i = 0; i < len1; i++) {
for(j = 2; j < 10; j++) {
len2 = strlen(t[j]);
for(k = 0; k < len2; k++) {
if(t[j][k] == p[i])
t_num[pos++] = j;
}
}
} t_num[pos] = '\0';
for(i = 0; i < N; i++) {
if(strcmp(t_num, num[i]) == 0)
ans[i]++;
}
} int main() {
scanf("%d", &T); while(T--) {
int i;
scanf("%d%d", &N, &M); memset(ans, 0, sizeof(ans));
strcpy(t[2], "abc");
strcpy(t[3], "def");
strcpy(t[4], "ghi");
strcpy(t[5], "jkl");
strcpy(t[6], "mno");
strcpy(t[7], "pqrs");
strcpy(t[8], "tuv");
strcpy(t[9], "wxyz"); for(i = 0; i < N; i++)
gets(num[i]);
for(i = 0; i < M; i++)
gets(word[i]); for(i = 0; i < M; i++)
getans(word[i]); for(i = 0; i < N; i++)
printf("%d\n", ans[i]);
}
return 0;
}

HDU 4287 (13.08.17)的更多相关文章

  1. UVA 536 (13.08.17)

     Tree Recovery  Little Valentine liked playing with binary trees very much. Her favoritegame was con ...

  2. UVA 673 (13.08.17)

     Parentheses Balance  You are given a string consisting of parentheses () and []. Astring of this ty ...

  3. HDU 4642 (13.08.25)

    Fliping game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  4. HDU 4287 Intelligent IME(字典树数组版)

    Intelligent IME Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. 13.1.17 CREATE TABLE Syntax

    13.1.17 CREATE TABLE Syntax 13.1.17.1 CREATE TABLE ... LIKE Syntax 13.1.17.2 CREATE TABLE ... SELECT ...

  6. Intel Digital Innovation Industry Summit(2018.08.17)

    时间:2018.08.17地点:北京金隅喜来登大酒店

  7. HDU 4287 Intelligent IME hash

    Intelligent IME Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  8. hdu 4287

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4287 #include<cstdio> #include<cstring> # ...

  9. UVA 10194 (13.08.05)

    :W Problem A: Football (aka Soccer)  The Problem Football the most popular sport in the world (ameri ...

随机推荐

  1. Java 学习第一天

    java 学习路线 http://edu.csdn.net/main/studyline/heimaline.html?flz java 学习视频 —— 马士兵:毕向东

  2. UICollectionView的基本使用

    这个控件,看起来与UITableView有点像,而且基本的用法也很相像哦!!! 我们来看看API: #pragma mark - UICollectionViewDataSource // 指定Sec ...

  3. Sybase自增字段跳号的解决方法

    Sybase自增字段跳号原因及影响: 在Sybase数据库中如果数据库在开启的情况下,因为非正常的原因(死机.断电)而导致数据库服务进程强制结束. 那么自动增长的字段将会产生跳号的情况,再往数据表里面 ...

  4. iOS平台下cookie的使用

    iOS平台下cookie的使用 首先,先介绍下iOS对cookie的操作的两个类: 帖子来源于:http://blog.csdn.net/chun799/article/details/1720690 ...

  5. HTML与CSS入门——第十一章  在网页中使用图像

    知识点: 1.在网页上放置图像的方法 2.用文本描述图像的方法 3.指定图像高度和宽度的方法 4.对齐图像的方法 5.将图像转换为俩接的方法 6.使用背景图像的方法 7.使用图像映射的方法 11.1 ...

  6. 五种常见的ASP.NET应用程序安全缺陷

    下面给出了五个例子,阐述如何按照上述建议增强应用程序的安全性.这些例子示范了代码中可能出现的缺陷,以及它们带来的安全风险.如何改写最少的代码来有效地降低攻击风险.1 篡改参数◎ 使用ASP.NET域验 ...

  7. hdu 1282 回文数猜想

    Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其 ...

  8. meta 属性

    几乎所有的网页里,我们可以看到类似下面这段的html代码:<head><meta http-equiv="content-Type" content=" ...

  9. iOS基本的发短信和打电话调用

    电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...

  10. MVC之实体框架(数据持久化框架)EntityFrameWork(EF)

    EF - EntityFrameWork 中文名:实体框架(数据持久化框架) 1.使用EF查询(Linq to EF) 1.1使用标准查询运算符来查询 OumindBlogEntities db = ...