Xmas Contest 2018 D: Devilish Dice 解説
https://atcoder.jp/contests/xmascon18/tasks/xmascon18_d
問題概要
個の 面さいころの目を上手く決めて,「どのさいころについても,他のあるさいころを選ぶと確率 以上でそれより大きい目が出せる」となる を最大化せよ.
考察
くろうさ「先にさいころ選んでいいよ」
しろうさ「やさしい」
くろうさがやさしいわけはなく (?), かつ ではこれはくろうさ有利なゲームです.例えば, という 個のさいころを考えると, となり,三竦みの関係が生じます.他にも大量の例が https://en.wikipedia.org/wiki/Nontransitive_dice に載っています.
とても手に負えなさそうですが,問題を単純化できる考察がいくつかあります.まず,別のさいころに同じ値を書く意味はありません.同じ値があるとき片方を少し増やしてもくろうさは何も損しないからです (くろうさの勝率 の中身が増えるだけなので).
また,「 竦み」のような関係のみ考えればよいです.あるさいころに対して,それに強いさいころ,さらにそれに強いさいころ,……というようにとっていくとサイクルができるので, に対する,「 となる最大の 」で答えが上から抑えられます.逆にこういうサイクルをひとつ作ってしまえばあとは弱いさいころを好きなだけ足せばよいです.
解法 1
ここまでを念頭にマシンパワーで DP をします. を固定します.
さいころ の順で目を決めていくことにすると, を決めるときには と 以外の情報は要りません.ということで, と の目の大小関係を状態 ( 通り) として, を最大化する DP をします.
DP の遷移をするには, と の大小関係それぞれに対する, と と の大小関係 ( 通り) が一見要りそうですが, と の大小関係を決めてしまえば十分で,なぜならその制約の下では を に対してできるだけ強くしてしまってよいためです.
DP テーブルをどの まで作るかですが,やってみるとそのうち変わらなくなるので打ち切れます ( なら実は までしか要りません).あるいは後述のように に対する勝率の上限を求めておいてそれを達成したら打ち切る,というのもできます.
こんな感じで, に多項式がかかったような計算量で解けるので,がんばって回して答えを埋め込みましょう.細かい定数倍高速化としては,例えば「 が目の最大値を持つことにしてよい」を採用すると 倍速くなって嬉しいです.わたしのコードは実行時間 分くらいでした.
japlj さんと snuke さん は,ちょっと別のアプローチのマシンパワー探索解法をしていました.答えを決め打って必要な を求めにいく方針で,枝刈りが上手く効くようです.
解法 2
いろいろ実験をすると,「 番目のさいころには と しか書かない」というパターンで結構いい感じの勝率が得られていそうなことに気づけるかもしれません (後述のように,これはただの偶然でも突拍子もない発想でもないです).実際に ではこれですべて正解できるようです.
コンテスト中の hogloid さん,終了直後の omeometo さんの解法がこのパターンを見つけた方針でした.コンテスト前には,snuke さん作のゲームを手で遊んだ結果から似たようなパターンを試していたのですが,変な greedy をしていて で不正解になっていたので,全探索系以外は厳しいかも?と思っていたのでした.
このパターンを仮定するなら,いろいろな解法が考えられます.例えば,「 番目のさいころの の個数」と「 番目のさいころの の個数」を状態として持つ DP ( 時間) が楽だと思います.
さて,この仮定が正しいかというと,実は反例があるようです. で,
144444444444444444444444444 222222222225555555555555555 033333333333333336666666666
というさいころを考えると,くろうさの勝率は ですが, 値さいころだけではこれは実現できません.ただ,この反例のように,「 に対しては 番目のさいころには と しか書かない, 番目のさいころには と と しか書かない」というパターンなら正しいのではないかと予想しています.証明を募集しています!!
参考 1 (fixed K)
を固定したときの勝率の最大値は です.
これは,「中央値が最小」みたいなさいころを考えることで上から抑えられます.正確には, 竦みの中で自身の 番目の値が最小のさいころを考えると,それは他のさいころに高々 でしか勝てないので, ととることで示せます.この評価の仕方は, 値さいころだけを考えてもかなり上手くいくことを示唆しているかもしれません.
最大値をとる具体的な構成もできて,例えば として,「 番目のさいころには が 個で残りは 」というようにすればよいです ( はもっと小さくとれます).
とするとこの値は になります.さいころに限らない一般の確率分布を考えても,勝率は が上限ということですね.
参考 2 (fixed N)
を固定したときの勝率の上限は です (!?). ではそれぞれ となります.
詳しくは https://mathoverflow.net/a/119885 をご覧ください.
わたしは証明をちゃんと把握できていないのですが, 値の確率分布だけを考えればよいことを示すという方針のようです. が固定されているときに同じ議論は適用できないのですが, 値さいころだけを考える有力な根拠となります.解法 の最後で述べた予想も, を固定したときの最適解を近似したものがベストだろう,という考えに基づいています.
コメント
三竦みが作れるってだけでも面白いのにいろいろ楽しい数学が奥に潜んでいる,という感じの話題を,全部有限にして探索力 and/or 数学センスを問う問題にしてみました.不思議な問題ですね.