Typical DP Contest:C - トーナメント
問題
https://atcoder.jp/contests/tdpc/tasks/tdpc_tournament
考え方
が優勝するときは 連勝する必要がある。以下のようにDPを定義する。
が 連勝するときの確率
が 連勝するときは、 が 連勝する確率に、対戦相手 が 連勝して、 が に勝つ場合であるから以下のようなDP遷移を考えることができる。
は が に勝つ確率
DP初期値としては、 連勝は常に可能と考えて以下のようになる。
各 について、 連勝するときに戦う候補となる相手 について考える。例として以下のような のトーナメントを考えよう。相手のみを考察するのでレートは省略する。
今 の場合に戦う相手の候補は以下となる。これは の ビット目以降が同じ数のうち、 ビット目が異なる数である。
の場合も同様である。
Submission #3919742 - Typical DP Contest
どこに着目して考察するべきだったか
が 連勝するときの確率と捉えるとDPが見えてくるかもしれない。また戦う相手の候補は「bitで考えて上位bitが同じ数のうち、 ビット目が異なる数」と考えるのは少しテクニックが必要な気がする。bitの性質を捉えて同じbitが同じグループに属する数はなにか?と考えると良いかもしれない。
何がバグっていたか
得た知見
- 確率DPの定義方法(一例)
- ビットで候補を計算する考え方と実装方法。
>>
と<<
を組み合わせる