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つにしてから他の式と比較すればいいのか。