ABC088 C - Takahashi's Information

備忘録

問題

atcoder.jp

回答

"use strict"
function Main(input) {
  input = input.trim().split('\n');
  let h = input[0].trim().split(' ').map(Number);
  let m = input[1].trim().split(' ').map(Number);
  let l = input[2].trim().split(' ').map(Number);

  let x = [m[0]-h[0], m[1]-h[1], m[2]-h[2]]
  let y = [l[0]-m[0], l[1]-m[1], l[2]-m[2]]

  if(x[0] === x[1] && x[1] === x[2]){
    if(y[0] === y[1] && y[1] === y[2]){
      console.log('Yes');
      return;
    }
  }
  console.log('No');
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));

考え方

b_1 b_2 b_3
a_1 c1,1 c1,2 c1,3
a_2 c2,1 c2,2 c2,3
a_3 c3,1 c3,2 c3,3

仮にAi + Bj = Ci,j が成り立っていると、
A1 = C1,1 - B1
A1 = C1,2 - B2
A1 = C1,3 - B3
となる。 つまり、各行のAは
Ai = Ci,j - Bj が成り立っている。

これはすべての列で1行ごとの変化量が等しいということなので、
変化量が等しくない場合には Ai + Bj = Ci,j が成り立たないことがわかる。

例:

1 0 1
2 1 2
1 0 1

上記のインプットの場合、
各B列の1行ごとの変化量は下記の通り。
B1列は1 → 2(+1) → 1 (-1)、B2列は 0 → 1(+1) → 0 (-1)、B2列は 1 → 2 (+1) → 1 (-1)
すべての列において変化量が等しいのでYes

2 2 2
2 1 2
2 2 2

上記のインプットの場合、
各B列の1行ごとの変化量は下記の通り。
B1列は2 → 2(+0) → 2(+0)、B2列は 2→ 1(-1) → 2(+1)、B2列は 2 → 2 (+0) → 2 (+0)
すべての列において変化量が等しくないのでNo