ABC088 C - Takahashi's Information
備忘録
問題
回答
"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"));
考え方
c1,1 | c1,2 | c1,3 | |
c2,1 | c2,2 | c2,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