Official

B - Distance Between Tokens Editorial by KoD


一方の駒が \(a\) 行目 \(b\) 列目のマスに置かれており、もう一方の駒が \(c\) 行目 \(d\) 列目に置かれているとします。このとき、\(|a - c| + |b - d|\) が答えとなります。よって、駒が置かれているマス目を特定することができればよく、これは for 文や if 文を用いて実装することができます。

実装例 (C++) :

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

int main() {
    int h, w;
    cin >> h >> w;
    vector<pair<int, int>> pieces;
    for (int i = 0; i < h; ++i) {
        for (int j = 0; j < w; ++j) {
            char c;
            cin >> c;
            if (c == 'o') {
                pieces.emplace_back(i, j);
            }
        }
    }
    const auto& [a, b] = pieces[0];
    const auto& [c, d] = pieces[1];
    cout << abs(a - c) + abs(b - d) << '\n';
    return 0;
}

実装例 (Python)

h, w = map(int, input().split())
s = [input() for _ in range(h)]
pieces = []
for i in range(h):
  for j in range(w):
    if s[i][j] == 'o':
      pieces.append((i, j))
a, b = pieces[0]
c, d = pieces[1]
print(abs(a - c) + abs(b - d))

posted:
last update: