201.1

250

エレベータに降りた人数と乗った人数が順次与えられる。エレベータに乗れる上限の人数が与えられるので、最初に乗っていた人数の上限と下限を答えよという問題。


最初に乗っていた人数を0と仮定して、降りた直後の人数の最小値と乗った直後の人数の最大値を覚えておく。このとき最小値から最大値までの幅だけ人数が移動する。この幅が上限を超えてしまうとダメ。上限から最大値を除いた分だけ詰め込んでおくことができるので、これが最初に乗っていた人数の上限。下限は中にいた人が降りられるという制約を満たさないといけないので、エレベータから降りた直後の人数の最小値が0になるようにしないといけない。


要は人数の上下幅の下限が0以上になるものと、上限がエレベータに乗れる最大人数になるように初期人数が調整できるということ。

500

マップが与えられて、移動できる方向と移動した方向のシーケンスが与えられるので、可能な初期値をすべて答えよという問題。


書いてある通りに実装すれば良いというだけの問題。

1000

森の中心を中心として円運動を続ける犬が、木に当たると木に沿って反時計回りに移動する。再び森の中心を中心として円運動をできるようになれば木から離れて運動を続ける。このとき犬が森の中心から一定距離の範囲に入るまでにどれだけ運動すれば良いかを答えよという問題。


取り敢えず一周しても何にも当たらないようならば終了。当たる位置を計算して一番近くの木に当たる。木に当たっている最中のみ、森の中心に近付くので、森の中心からの距離を吟味しつつ、森の中心まで一番近い場所に移動。というのを繰り返す。幾何の実装の問題。二円の交点の式が与えられていたので、それをメモしておく方が重要なのかも。