Official

B - 1D Keyboard Editorial by en_translator


For a character \(c\), let \(X_c\) be the coordinate of the key corresponding to the character \(c\).

Then, what we need to find is \(|X_A-X_B|+|X_B-X_C|+\ldots+|X_Y-X_Z|\).

If we can find \(S\) from \(X\), the sought value can be found using a for statement.

In an ordinary programming language, an array is indexed by a non-negative integer, but not by a character. For the implementation of this problem, one can correspond the integer \(0\) to A, \(1\) to B, \(\ldots\), and \(25\) to Z, so that the aforementioned \(X\) can be managed as an array. Alternatively, you may use an associative array with its key being a character type.

Sample code (C++):

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    cin >> s;
    vector<int> x(26);
    for (int i = 0; i < 26; ++i)
        x[s[i] - 'A'] = i;
    int ans = 0;
    for (int i = 0; i < 25; ++i)
        ans += abs(x[i] - x[i + 1]);
    cout << ans << endl;
}

Sample code (Python3):

s = input()
x = [0] * 26
for i in range(26):
    x[ord(s[i]) - ord("A")] = i
ans = 0
for i in range(25):
    ans += abs(x[i] - x[i + 1])
print(ans)

posted:
last update: