二次元配列を調べる練習問題!
問題概要
人のリーグ戦の戦績表が下図のように与えられる。'W' は勝ち、'L' は負け、'D' は引き分けを表す。また、対角線上は '-' である。
4 -WWW L-DD LD-W LDW-
この戦績表が矛盾しているかどうかを調べよ。
考えたこと
各 に対して、マス とマス の整合性を確かめていけばよい。
- 一方が 'D' のときは、他方も 'D' でなければならない
- 一方が 'W' のときは、他方は 'L' でなければならない
- 一方が 'L' のときは、他方は 'W' でなければならない
二重の for
文で実現できる。
コード
である範囲のみを調べれば十分なので、そのように実装した。
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; vector<string> A(N); for (int i = 0; i < N; ++i) cin >> A[i]; bool ok = true; for (int i = 0; i < N; ++i) { for (int j = i + 1; j < N; ++j) { if (A[i][j] == 'D' && A[j][i] != 'D') ok = false; if (A[i][j] == 'W' && A[j][i] != 'L') ok = false; if (A[i][j] == 'L' && A[j][i] != 'W') ok = false; } } if (ok) cout << "correct" << endl; else cout << "incorrect" << endl; }