はまやんはまやんはまやん

hamayanhamayan's blog

Takahashi's Information [AtCoder Beginner Contest 088 C]

https://abc088.contest.atcoder.jp/tasks/abc088_c

解法 (Hacked)

https://abc088.contest.atcoder.jp/submissions/2108917

この記事は、確定性に欠ける記載があって、Challenge成功済みの記事です。
消してしまうのもアレなので残しておきますが、皆さまからの解説Hackは大歓迎ですので、またよろしくお願いします。

まだ300点問題なので、簡単に考えることを心がけて考えてみる。
すると、a1,a2,a3は全探索可能であると分かる。
これを全探索すると「a1 + b1 = C[0][0]なのでb1 = C[0][0] - a1」のようにb1,b2,b3を一意に定まる。
あとは、これを使って行列Cが正しいかチェックして、整合性が保たれるならYes
1つも条件を満たさないならNo
0≦C[i][j]≦100なので、a1,a2,a3も[0,100]で探索すればいい。

int C[3][3];
int A[3], B[3];
//---------------------------------------------------------------------------------------------------
void _main() {
    rep(i, 0, 3) rep(j, 0, 3) cin >> C[i][j];
 
    rep(a1, 0, 101) rep(a2, 0, 101) rep(a3, 0, 101) {
        int b1 = C[0][0] - a1;
        int b2 = C[0][1] - a1;
        int b3 = C[0][2] - a1;
 
        A[0] = a1;
        A[1] = a2;
        A[2] = a3;
        B[0] = b1;
        B[1] = b2;
        B[2] = b3;
 
        int ok = 1;
        rep(i, 0, 3) rep(j, 0, 3) if (A[i] + B[j] != C[i][j]) ok = 0;
        if (ok) {
            printf("Yes\n");
            return;
        }
    }
 
    printf("No\n");
}