Official
E - Random Swaps of Balls Editorial
by
E - Random Swaps of Balls Editorial
by
Cyanmond
操作の対称性を考えると、ある時点で黒いボールが最も左にある確率を \(p\) としたとき、左から \(2, 3, \dots ,N\) 番目にある確率はどれも \(\displaystyle \frac{1 - p}{N - 1}\) です。そのため、 \(K\) 回操作をした後に黒いボールが最も左にある確率が求まれば、この問題を解けます。これは動的計画法で求められます。
- \(\mathrm{dp}[i] := i\) 回操作をしたとき黒いボールが最も左にある確率
と定義します。求めたいものは \(\mathrm{dp}[K]\) です。遷移には、以下の \(2\) つの確率が必要です。
- 黒いボールが最も左にある状態から \(1\) 回操作して、黒いボールが最も左以外のどこかに移動する確率
- 黒いボールが最も左以外のどこかにある状態から \(1\) 回操作して、黒いボールが最も左に移動する確率
それぞれ \(p, q\) とします。DP の遷移は以下の通りです。
- \(\mathrm{dp}[0] = 1\)
- \( \mathrm{dp}[i+1] = (1 - p) \mathrm{dp}[i] + q(1 - \mathrm{dp}[i])\)
\(p, q\) は単純な場合の数の計算で
- \(\displaystyle p = \frac{2(n - 1)}{n^2}\)
- \(\displaystyle q = \frac{2}{n^2}\)
とわかります。これを素直に実装すると計算量 \(\mathcal{O}(K)\) の解法が得られます。整理すると \(2\) 項間線形漸化式の形になり、一般項を簡単な形で表現できます (高校数学の典型的な問題です) 。累乗の計算がボトルネックとなり、 \(\mathrm{dp}[K]\) は計算量 \(\mathcal{O}(\log K)\) で求まります。
より一般に、線形漸化式の第 \(N\) 項を求める高速な方法として、行列累乗や Fiduccia のアルゴリズムがあります。
posted:
last update: