ABC088 C:Takahashi's Information

たぶん定数オーダーで解けるんだろうけど、よくわかんねえから全探索した。

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

全探索してもせいぜい100^3の計算量だからいけるはず。いった。さすがC++。

signed main() {
    int cs[3][3];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> cs[i][j];
        }
    }

    bool ok = false;
    for (int a0 = 0; a0 <= 100; a0++) {
        for (int a1 = 0; a1 <= 100; a1++) {
            for (int a2 = 0; a2 <= 100; a2++) {
                int b0 = cs[0][0] - a0;
                int b1 = cs[0][1] - a0;
                int b2 = cs[0][2] - a0;

                bool ok_b0 = (b0 == cs[1][0] - a1 && b0 == cs[2][0] - a2);
                bool ok_b1 = (b1 == cs[1][1] - a1 && b1 == cs[2][1] - a2);
                bool ok_b2 = (b2 == cs[1][2] - a1 && b2 == cs[2][2] - a2);

                if (ok_b0 && ok_b1 && ok_b2)
                    ok = true;
            }
        }
    }

    string ans = ok ? "Yes" : "No";
    cout << ans << endl;
}

注:これは嘘解法の可能性が高い。0 <= n <= 100 の範囲にあるのは a ではなく c だから。

もっと頭いい回答ないかなあと探していたら、あった。僭越ながら引用させて頂く。

http://mkan-0141.hatenablog.com/entry/2018/02/18/224008

こういうふうにして代数を2つにしてから他の式と比較すればいいのか。