Codeforces Beta Round #62

A: Irrational problem

方針

やるだけ

実装

CodeforcesRuby で書くのが常だが、next_permutation が使いたかったので C++ で書いた。
next_permutation するときは、事前のソートを忘れずに!

B: Energy exchange

方針

一台あたり エネルギー E にできるなら、任意の e < E にすることもできる。なぜなら、余ったエネルギーは、二台のあいだでお手玉させて消せるから。したがって、二分探索可能

実装

Codeforces #60 C: "Harry Potter and the Golden Snitch" の教訓を活かして実装。ループ回数は固定。出力はOKな側を(実は、逆を出してた……。通ったからいいけど、危ない危ない)。浮動小数点の出力前には、setprecisionする。

C: Synchrophasotron

方針

いろいろ考えたが分からない

D: Half-decay tree

方針

問題のサイズ的に、全部試すのは無理だろう。となると、数学ガール4巻でも強調されていた、期待値の線形性を使うことになりそう。深さ3くらいを手で試してみると、各ノードは(根を除いて) 1/2 の確率で寄与することになる。ということは、各ノードの値に 1/2 をかけて足すだけ? しかも、ノードをバラバラに考える必要はなくて、深さごとに電子数を覚えておけばよい。

書く。テストケース通る。え? と思いつつ提出。― pretest 2 で落ちる。あ、『「一番大きな component」の値』じゃなくて、『「一番大きな値になるcomponent」について、その値」の期待値だった。だめじゃん。世の中甘くなかった。

A を見る

やることなくなったので、A を Lock して他の人のを見る。1時間以上かかって出した黒色の人で、p を sort してるけど、next_permutation してない解答を発見。しめしめと思いながら、撃墜を狙う。一応、自分のコードを next_permutation しないようにして、答えが食い違うケースを探す。……あれ? 落ちない。もしかして、mod p[i] する順序って可換!?

結果・感想

A, B 通る。下がるかと思ったが、1752→1758 と微増。

もう一問解きたいなぁ。とはいえ、B の二分探索を解けたのは嬉しい。