B - 1D Keyboard题解
题目大意
给你一个序列S
(键盘)让你算从 A
到按到 Z
(也就是把 ABC……XYZ
都找一遍)的距离最小多少
解题思路
-
存储字符位置:使用数组
a
存储每个字符在新布局中的位置。a[int(s[i])] = i;
将字符s[i]
的位置设置为i
。 -
计算总距离:从
B
到Z
,遍历每个字符,计算当前字符与前一个字符之间的距离,并累加到cnt
中。使用abs(a[i] - a[i - 1])
计算两个字符之间的绝对距离。 -
输出结果:最后输出总的移动距离
cnt
。
代码
int a[N];
void solve(){
int cnt = 0;
string s;
cin >> s;
for(int i = 0; i < s.length(); i++)
a[int(s[i])] = i;
for(int i = int('A') + 1; i <= int('Z'); i++)
cnt += abs(a[i] - a[i - 1]);
cout << cnt << endl;
}
后记
首先,这题一出来我都是蒙了的
因为题目里说了S
是ABCDEFGHIJKLMNOPQRSTUVWXYZ
的排列
然而 样例2 就直接给我干沉默了
咋滴 输入样本2 是
MGJYIZDKSBHPVENFLQURTCWOAX
啊????
你谁家好人样例跟自己出的题的限制因素不一样啊????
后来经过我与我们教练的沟通
我才知道
只是给你一个序列(键盘)让你算从 A
到按到 Z
(也就是把 ABC……XYZ
都找一遍)的距离最小多少
我嘞个无语啊……