けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 351 B - Spot the Difference (7Q, 灰色, 200 点)

二次元配列を二重 for 文で調べる最低ライン!

問題概要

 N \times N のグリッドにアルファベット文字が書かれたものが 2 つ ( A, B) 与えられます。

これらは 1 箇所のみ異なっていることが保証されます。

 A_{i, j} \neq B_{i, j} であるような  (i, j) を答えてください。

制約

  •  1 \le N \le 100

解法 (C++)

グリッドデータ (AB) は vector<string> 型で管理するとよいでしょう。このとき、グリッド A の上から  i 行目 (0-indexed)、左から  j 列目 (0-indexed) のマスの文字は A[i][j] と表せます。

よって、各  i, j に対して、A[i][j] != B[i][j] であるかどうかを判定していけばよいでしょう。そして、そのようになっている  i, j (を 1-indexed に直したもの) を記録しておきましょう。

コード

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

int main() {
    int N;
    cin >> N;
    vector<string> A(N), B(N);
    for (int i = 0; i < N; ++i) cin >> A[i];
    for (int i = 0; i < N; ++i) cin >> B[i];
    
    int x = -1, y = -1;
    for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) {
        if (A[i][j] != B[i][j]) {
            x = i+1, y = j+1;
        }
    }
    cout << x << " " << y << endl;
}