AcWing 3381. 手机键盘
原题链接
简单
作者:
SmallMatch
,
2022-07-08 16:21:37
,
所有人可见
,
阅读 212
#include<bits/stdc++.h>
#define mk(a,b) make_pair(a,b)
using namespace std;
map<char,pair<int,int>> mp; //在第i个,需要按j次
void init(){
for(int j = 0, i = 0; j <= 'z' - 'a'; ++j){
// 's'和'z'跟其他字母不一样,单独处理
if(j == 's' - 'a' || j == 'z' - 'a')continue;
// j来处理字母,i来处理字母的位序
mp[(char)('a' + j)] = mk(i / 3, i % 3 + 1);
i++;
}
mp['s'] = mk(5,4);
mp['z'] = mk(7,4);
}
int main(){
string str;
init();
while(cin >> str){
int ans = 0;
for(int i = 0;i < (int)str.size(); ++i){
auto [x,y] = mp[res[i]];
// x为当前字母在第几块用于标识
// y为当前字母在该块的第几位
if(i && x == mp[res[i - 1]].first){
ans += 2;
}
ans += y;
}
cout << ans << endl;
}
return 0;
}