F - A Certain Game Editorial by Tomii9273
マージテク2回とimos法を使う解法以降では、「人数の多いチームの末尾に人数の少ないチームのプレイヤーを (順序を維持したまま) 全員追加し、人数の少ないチームを削除する」という操作を各対戦について順番に行うことを、マージテク操作と呼びます。
- まず、マージテク操作を行い、最終的にできた \(1\) チームを表す数列を \(A\) とします。
- \(i = 0, 1, ..., n-1\) について、プレイヤー \(A_i\) の番号を \(i\) に変更します。
- もう一度 (振り直した番号のもと) 同様のマージテク操作を行うことを考えます。
このとき、途中登場するすべてのチームは連続な整数の列で表すことができます。
そのため、マージテク操作を行いながら imos 法で勝率を区間加算することで、最終的に期待値の数列を構築できます。 - 累積和をとり、振り直す前の番号を考慮した解答を作成します。
時間計算量は \(O(N \log N)\) です。
実装例 (Python)
posted:
last update: