2018年4月月赛 Day2 携带 题解

2018年4月月赛 Day2 携带 题解

题目描述

一般的九键手机的键盘是这样的:

     
1 2 abc 3 def
4 ghi 5 jkl 6 mno
7 pqrs 8 tuv 9 wxyz
* 0 #

要按出英文字母就必须要按数字键多下。例如要按出x就得按9三下,第一下会出9,第二下会出w,而第三下会把w变成x。0键按两下会出一个空格。

你的任务是读取一个句子,求出要在手机上打出这个句子至少需要按多少下键盘。

输入输出格式

输入格式

一行一个句子,只包含英文小写字母、数字、空格、星号(*)和井号(#),且不超过200个字符。

输出格式

一行一个整数,表示按键盘的总次数。

输入输出样例

输入样例#1:

1
i have a dream

输出样例#1:

1
37

大模拟。

可类比Luogu P1765

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<char,int>m;
void set()
{
m['*']=m['#']=1;
for(char i='0';i<='9';i++) m[i]=1;
m['a']=m['d']=m['g']=m['j']=m['m']=m['p']=m['t']=m['w']=2;
m['b']=m['e']=m['h']=m['k']=m['n']=m['q']=m['u']=m['x']=3;
m['c']=m['f']=m['i']=m['l']=m['o']=m['r']=m['v']=m['y']=4;
m['s']=m['z']=5;
m[' ']=2;
}
int main()
{
set();
string s;
getline(cin,s);
int ans=0,len=s.length();
for(int i=0;i<len;i++) ans+=m[s[i]];
cout<<ans;
return 0;
}
--It's the end.Thanks for your read.--