AtCoder Beginner Contest 088 のC問題

ABC088のCを解いてて、解説を見てみると自分と解法が異なったのでメモ

 

とりあえず問題文の引用(一部改変)

3 × 3 のグリッドがあります. 上から i 番目で左から j 番目のマスを ( i , j ) で表すとき, マス ( i , j ) には数 c_(i,j) が書かれています. 高橋君によると, 整数 a_1 , a_2 , a_3 , b_1 , b_2 , b_3 の値が決まっており, マス ( i , j ) には数 a_i + b_j が書かれているらしいです. 高橋君の情報が正しいか判定しなさい. 

 さて、問題文より、c_(i,j) = a_i + b_jだから、

c_(1, 1) = a_1 + b_1

c_(2, 1) = a_2 + b_1

c_(1, 2) = a_1 + b_2

c_(2, 2) = a_2 + b_2 したがって

c_(1, 1) = c_(1, 2) + c_(2, 1) - c_(2, 2) が成り立つ。さらにいえば、

c_(n, m) = c_(n, m+1) + c_(n+1, m) - c_(n + 1, m + 1) … ① が成り立つので、

c_(1, 1), c_(2, 1), c_(1, 2), c_(2, 2)を左辺のそれとしてそれぞれ①の考え方を当てはめればOK。その4通りが成り立っていればYes、そうでなければNo

 

下がD言語での記述の例。

Submission #2276608 - AtCoder Beginner Contest 088

 

D問題をD言語で解けるようになる日が待ち遠しい。