咕咕东的奇遇
问题描述
咕咕东是个贪玩的孩⼦,有⼀天,他从上古遗迹中得到了⼀个神奇的圆环。这个圆环由字⺟表组成首尾相接的环,环上有⼀个指针,最初指向字⺟a。咕咕东每次可以顺时针或者逆时针旋转⼀格。例如,a顺时针旋转到z,逆时针旋转到b。咕咕东⼿⾥有⼀个字符串,但是他太笨了,所以他来请求你的帮助,问最少需要转多少次。
|
Output
Sample
Limitation
Time limit 1000 ms Memory limit 65536 kB
|
数据范围
数据点 |
字符串长度 |
1, 2 |
≤ 10 |
3, 4, 5 |
≤ 100 |
6, 7, 8, 9, 10 |
≤ 10000 |
解题思路
简单题,起点为a
,每次只有顺时针或者逆时针2种选择,而顺/逆时针判断条件是走的步数是否≤13,由于转盘是有序的,而走的步数可以通过字母表确定。利用a - z
的ASCII码
有序对应97 - 122
,两者ASCII
的差值+26再除26求余数即可确定步数,然后把起点标记为走到的那一个,如此循环,直至走完。
但是由于个人疏忽,if
判断处有写(差值+26)%26
,确定步数时却忘了+26
直接进行求余
,看着样例没问题,自己出样例又要费时间去算,就直接提交,然后WA
了……分全没了……😭(赛后补题补上+26
直接AC
了……)
源代码
#include <iostream> using namespace std;
int main() { char start = 'a';
string x; cin >> x; int n = x.length(); int count = 0; int step = 0; for (int i = 0; i < n; i++) { if (((x[i] - start + 26) % 26) <= 13) { step = (x[i] - start + 26) % 26; count += step; start = x[i]; }
if (((x[i] - start + 26) % 26) > 13) { step = 26 - (x[i] - start + 26) % 26; count += step; start = x[i]; } }
cout << count << endl;
return 0; }
|