Official

D - Shopping Editorial by evima


ゲームを次のようなものと見なしましょう。はじめ、各プレイヤーに \(1\) から \(K\) までの番号がついた \(K\) 枚のカードが配られます。各ターンでは、手番のプレイヤーは手札から \(1\) 枚をランダムに選んで出し、そのカードがジョーカー(後述)でなければ勝者となりゲームを抜けます。このとき、出されたカードの番号を \(x\) として、(他のプレイヤーの手札の中の)他の全ての \(x\) 番のカードがジョーカーに変化します。\(K\) 人が勝ち抜けるとゲーム終了です。

全員にちょうど \(1\) ターンが回った時点で何が起きているでしょうか。各プレイヤーについて、次のいずれかが起きています。

  • 勝ち抜けている。
  • 手札が \(K - 1\) 枚ある。すでに勝ち抜けた人数を \(J\) 人として、ジョーカーはちょうど \(J - 1\) 枚ある(一周目で勝ち抜けていないので、出したカードはジョーカーだったことになる)。

鍵となるのは、残っている各プレイヤーに同じ数のターン(\(t\) ターンとします)が回った時点で、その人たちが持っているジョーカーの枚数が全て同じ(\(J\) をすでに勝ち抜けた人数として \(J - t\) 枚)であると気づくことです。

したがって、次のような DP の状態を定義できます。

\(dp[n][a][b][i]\): \(n\) 人が残っていて、それぞれの手札は \(a\) 枚で、そのうち \(b\) 枚はジョーカーである。\(i\) 番目のプレイヤーが勝者となる確率は?

\(dp[n][a][b][i]\) を計算するための漸化式は、\(i\) 番目の人の 前 / 後ろ のプレイヤーのうち次のターンで勝ち抜ける人数 \(l, r\) を列挙すると得られます。計算量は \(O(N^6)\) となりますが、定数倍が非常に小さくなります。

posted:
last update: