怠惰の累積和

技術/競プロ/怪文書/虚無

AtCoder Beginner Contest 112 C - Pyramid

問題概要

 中心座標(C_X,C_Y)、中心の高さHのピラミッドがあったが、それらの値はわかっていない。座標(x,y)でのピラミッドの高さはmax(H-|C_X-x|-|C_Y-y|,0)で与えられることがわかっている。

 N個の「座標(x_i,y_i)でのピラミッドの高さはh_iであった(1≦i≦N)」という情報が与えられるとき、(C_X,C_Y)及びHを求めよ。

atcoder.jp

 

解法

 入力の制約に「ピラミッドの中心座標と高さをちょうど1つに特定することができる」とあるため、N個の情報の内、少なくとも1つはh_i>0となる情報が存在することがわかる。つまり、そのh_imax(H-|C_X-x|-|C_Y-y|,0)で計算されるがH-|C_X-x|-|C_Y-y|>0となっていることになる(そうでなければh_iは0になっているはずである)。

 よって、H-|C_X-x|-|C_Y-y|=h_iの式を変形すると、H=h_i+|C_X-x|+|C_Y-y|となるため、(C_X,C_Y)が判明すればHも判明する。

 0≦C_X,C_Y≦100であることが保証されているため、(C_X,C_Y)は全探索することができる。よって、(C_X,C_Y)を全探索して、そのループの内部で各情報について、それと上式での計算結果が正しいかどうかを判定してやればよい。

atcoder.jp