223.1

気分が乗らない時にプログラミングするような習慣を身に付けようとか思ったり思わなかったり。

250

自分の持ち点の一部を賭けて、うまくいったらその分もらい、失敗したらその分失う、という状況で、自分と他の二人の持ち点と、他の二人が賭ける点数が与えられる。このとき自分が他の二人よりも点を持つ確率を最大にするために賭ける点数を答えよ、という問題。うまくいくかどうかは50%である。


他二人の点数の最大値として可能なものは高々4通りで、自分の点数がどうなるかは高々2通り。この8つの組み合わせのうち、自分の点数が大きくなるものの数が最大になるように賭ければよい。

500

三つの素数の各桁の数字を出現回数だけ使って、一つの文字列を作成する。この文字列から、三つの素数を復元せよ、という問題。候補が複数ある場合には、三つの素数の積が最小になるものを答える。先頭に0を使ってはいけない。


各桁が三つの素数のうちどれにおいて利用されるか、順番はどうか、というのを全通り試せば良い。ひたすら実装あるのみ。next_permutationを使うと非常に速く実装ができるけれど、Javaにはないような気がする。

1000

迷路の問題。支柱のある回転ドアを回すことができて、ゴールまで行くのに必要な最小回転数を答えよ、という問題。ドアの数が高々10個なので、ドアの状態と、立ち位置から、盤面をうまいことハッシュして、BFSとかして最短手を求める問題だと思う。実装が非常に面倒そうなのでやっていない。実地で終わる気がしないけれど、鍛えれば手が速くなったりするのかなぁ?