204.1

類題解いたのに...。
問題セットとしては悪くないと思う。

300

3の累乗の重さのおもりを使って、指定された重さを天秤で測定するには、どうおもりを配置すれば良いか答えよという問題。


3^Nまでのおもりをつかって実現できる重さは3^(N+1)/2なので、それよりも大きい重さが必要ならば3^(N+1)のおもりを使うというのを釣り合うまで両側に乗せていけば良い。もちろん大きい方のおもりから評価しないとダメ。

600

N枚のカードが渡され、そのカードを以降のK枚で任意の1枚を上書きすることができる。上書きしないことも可能。最初のN枚のカードを上書きして広義単調増加するように書き換えるのに必要なカードの最小枚数を答えよという問題。


頭から1枚ずつ使うカードを増やしていって、広義単調増加にできればそれで終了。うまいことやれば最初からソートされている状態を例外処理しなくてもいいとは思うけれど、今回は例外処理した。


まず使うカードをソートする。元のN枚のカードを先頭から順に見ていって、広義単調増加にならない最初の位置に使うカードのうち未使用のもので最小のものに置き換える。カードを使い終わった後にソートが完了しているか、カードを使い切れなかったらソートは完了しているので、その時の使用枚数を答える。

1000

N国の人から重複しないようにK国の人を取り出してグループを作るとき、最大でいくつグループが作れるか答えよという問題。


グループの数がMのとき、各国の人は高々M人までしか呼べない。全部の国から呼べる合計がM*K以上ならば、K人の組がM個作れる。後は最大のMをバイナリサーチで求めるだけ。ちなみに図示すると以下の通り。結構ありがち...。


AAAAAAAA
BBBBBBBC
CCCCCCDD
DDDDEEEE
EFFFGGHI


これが5人組みを8つ作る場合で、こういうように割り当てればいいので、ちゃんとグループが作れる。