263.1

非常に面倒なセット。基本は書いてある通りに実装するだけだけど、長文。

250

最初は正しい箱に正しい中身が入っている状態のものに対して、最後に使ったものは箱から出しっぱなしで、次のを使う時に今あけた箱に出しっぱなしだったものをしまうという処理を施す。最終的に正しくない箱に入っているものを答えよ、という問題。


実装しましょう、としか言いようがない。

500

ある整数列を先頭から順番にdequeに挿入し、最終的にdequeを結合する処理を施すことで、ソートを完了させたい。このときに必要なdequeの数はいくつか答えよ、という問題。


取り敢えず最初は新規にdequeを作る必要がある。そのdequeに対しては、他のdequeを跨がない整数のうち、自分の前後に来るはずの値がでてくるならば、追加できる。自分と同じ値が複数ある場合は、前か後ろのどちらかに自分と同じ値を常に入れるようにすれば良いので、そこで2通りに分岐する。前に入れるのは自分以下(または未満)の値で、自分よりも後に出る最大のもので、今までにどのdequeにも入っていないもの。後ろに入れるのはその逆。というのをひたすらに実装するだけ。


どう実装しても面倒になる気がしてならない...。

1050

ロボットの移動規則が延々と与えられる。ロボットの開始位置はそれぞれ異なり、特定の位置に最初に到達するとそのロボットと位置に応じたスコアを得ることができる。一度スコアを得るとそのロボットはそれ以上何もしない。このとき、各ロボットが最適に行動するとして、得るスコアを答えよ、という問題。


各ロボットが各地点に到達するまでの時間を計算する。(これが恐ろしく面倒。)今向いている方向と、現在位置でDPする。


後は、各ロボットが一番スコアの高い場所に向かうとして、衝突する奴を一つ一つ負ける奴を追い出せば良い。これはロボット数が26で、ゴール位置が26なので、26*26*26とどっちが先に目的地に到達するかをメモしておけば良い。(メモしていなくても終わる?)