出展

問題

N(≦500)人でゲームを行う.
N人中M(≦N)人は誰に投票するかを決めており,そのリストがdecisionsとして与えられる.
投票対象になる人のリスト"vulnerable"には初めN人全員が含まれるとして,以下のようにゲームを進める.

  • まずdecisionsで投票する人を決めている人のうち,投票する人がvelnerableに含まれている人が投票を行う.
  • 前ステップで投票を行わなかった人が順に,その時点で最も得票が少ない人からランダムに1人を選び投票する.
  • 得票数が最も多い人のみをリストvelnerableに残す.
  • velnerableに1人だけが残ったらその人の負けとし,そうでなければ最初のステップに戻る.

このとき,負ける確率が最も高い人の,負ける確率を求めなさい.
決着がつかない場合は0.0を返しなさい.

解法

  • 問題の性質を整理すると
    • 1回目の投票で最多票になる人はdecisionsで決められた投票で最多票になる人
    • decisionsで2票以上得る人がいなければ全員が1票になり決着がつかない
    • 2回目以降は,(残り人数 mod decisionsで投票されない人の数)人が残る
    • これが途中で0になる場合は全員の得票数が同じになるので決着がつかない
    • 1回目の投票の結果残る人は全員条件が同じなので,最後に1人になる確率も同じ
  • 以上から解法は,
    • decisionsで(2票以上の)最多票を得る人の数Cを求める
    • 2票以上得る人がいなければ0.0を返して終了
    • 2回目の投票以降の残り人数の推移を最後の1人になるまでシミュレーションする
    • 途中で0になった場合は決着がつかないので0.0を返して終了
    • 決着がつくことが確認できたので,求める確率である1/Cを返す

回答


添付ファイル: fileMafiaGame_pes.cpp 185件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-03-30 (水) 16:33:58 (3994d)