题目
请你计算按照手机键盘(9 键输入法)输入字母的方式,键入给定字符串(由小写字母构成)所花费的时间。
具体键入规则和花费时间如下描述:
对于同一键上的字符,例如 a,b,c 都在 “1” 键上,输入 a 只需要按一次,输入 c 需要连续按三次。
如果连续两个字符不在同一个按键上,则可直接按,如:ad 需要按两下,kz 需要按 6 下。
如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如 ac,在按了 a 之后,需要等一会儿才能按 c。
现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。
输入格式
输入包含多组测试数据。
每组数据占一行,包含一个由小写字母构成的字符串。
输出格式
对于每组输入,输出一行结果表示键入给定字符串所需要花费的时间。
数据范围
每个输入最多包含 100 组测试数据。所有字符串的长度都不超过 100。
输入样例:
输出样例:
代码:
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <iostream> #pragma GCC optimize(3) using namespace std; int main() { int t = 0, i = 0; int root[2][26]; for (int j = 0; j < 26; j++) { root[0][j] = i; root[1][j] = t; t++; if (t == 3 && i != 5 && i != 7) { i++; t = 0; } else if (t == 4 && (i == 5 || i == 7)) { i++; t = 0; } } string a; while (cin >> a) { int time = a.length(); for (int i = 0; i < a.length(); i++) { if (root[0][a[i] - 'a'] == root[0][a[i + 1] - 'a']) { time += 2; } time+=root[1][a[i]-'a']; } cout << time << endl; } return 0; }
|