sicily 1010. 单词数值
本题主要是Hash思想的应用
1010. 单词数值
|
||||||
|
||||||
Description
小明喜欢发短信,一天他突然想出一种定义短信中单词的值的方法,也许能够揭示某种规律。 小明的手机键盘如下图所示:
输入法为字母输入,即每次输入一个字母,例如需要输入字母x,由于x在数字键9上,排在第二位,因此需要按下9键两次。 小明定义单词的值如下:单词中每个字母(不区分大小写)的值等于按键数值与按键次数之积,单词的值等于所有字母的值之和。如单词word的值为9+6*3+7*3+3=51。 Input
第一行给出单词数T(1<=T<=100,000)。 接下来T行,每行一个单词,单词最大长度不超过100。 Output
输出T行,每行为单词的对应值。 Sample Input
3 Word I Day Sample Output
51 12 32 Problem Source: 课程上机练习题 |
||
代码:
1 // Problem#: 8657 2 // Submission#: 2493101 3 // The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License 4 // URI: http://creativecommons.org/licenses/by-nc-sa/3.0/ 5 // All Copyright reserved by Informatic Lab of Sun Yat-sen University 6 #include<iostream> 7 #include<map> 8 #include<stdio.h> 9 #include<string.h> 10 using namespace std; 11 int main() { 12 char alp[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 13 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w','x', 14 'y', 'z'}; 15 int num[26] = {2, 4, 6, 3,6, 9, 4, 8, 12, 5, 10, 15, 6, 12, 18, 16 7, 14, 21, 28, 8, 16, 24, 9, 18, 27, 36}; 17 map<char, int> keyboard; 18 for (int i = 0; i < 26; i++) { 19 keyboard[alp[i]] = num[i]; 20 } 21 int words; 22 int sum = 0; 23 char *word; 24 word = new char[101]; 25 scanf("%d", &words); 26 for (int i = 0; i < words; i++) { 27 scanf("%s", word); 28 int len = strlen(word); 29 for (int j = 0; j < len; j++) { 30 if ( 'A' <= word[j] && word[j] <= 'Z') 31 word[j] = word[j] + 32; 32 sum += keyboard[word[j]]; 33 } 34 printf("%d\n", sum); 35 sum = 0; 36 } 37 return 0; 38 }