E - Fruit Lineup 解説 by Kiri8128


\(N = A + B + C + D\) とします。また二項係数を \(\displaystyle \binom{n}{m}\) で表します。

最も右にあるリンゴの位置 \(i\) は、 \(A \le i \le A + B\) を満たす必要があります。 このとき、左から \(i - 1\) 個のうち \(A - 1\) 個のリンゴの位置、 右から \(N - i\) 個のうち \(C\) 個のバナナの位置を決める方法は \(\displaystyle \binom{i - 1}{A - 1} \times \binom{N - i}{C}\) 通りあります。 逆に、これらを決めると残りのオレンジとブドウの位置は一意に決まります。

よって、求める答えは \(\displaystyle \sum_{i = A}^{A + B} \binom{i - 1}{A - 1} \times \binom{N - i}{C}\) です。

階乗を前計算することにより、 \(O(N)\) でこの問題を解くことができます。

ACコード例 (Python)

投稿日時:
最終更新: