E - Fruit Lineup Editorial
by
Nyaan
一番左にあるブドウに注目します。
一番左にあるブドウよりも左に置かれているバナナの個数が \(i\) \((0 \leq i \leq C)\) 本である場合の、そのブドウの左右での並べ方の通り数をそれぞれ数えます。
(1) 「一番左にあるブドウ」の左側
「一番左にあるブドウ」の左側には
- \(A\) 個のリンゴ、\(B\) 個のオレンジ、\(i\) 個のバナナ
があります。ここで、「リンゴはバナナより左」という制約から、これら \(A+B+i\) 個の果物の並べ替え方の通り数は
- 「\(A+i\) 個のリンゴとバナナの列」の隙間にオレンジを差し込む方法
と一致することが確認できます。よって通り数は次のようになります。
\[\binom{A+B+i}{B}\]
(2)「一番左にあるブドウ」の右側
「一番左にあるブドウ」の右側には
- \(C-i\) 個のバナナと \(D-1\) 個のブドウ
があります。これらは自由な順番で並べてよいので通り数は次のようになります。
\[\binom{D-1+C-i}{D-1}\]
(1) (2) より、「一番左にあるブドウ」よりも左に置かれているバナナの個数が \(i\) \((0 \leq i \leq C)\) 本である場合の並べた方の通り数は
\[\binom{A+B+i}{B}\binom{D-1+C-i}{D-1}\]
です。よってこれらを \(i=0,1,\dots,C\) について足し合わせた
\[\sum_{i=0}^C \binom{A+B+i}{B}\binom{D-1+C-i}{D-1}\]
がこの問題の答えとなります。これは適切な階乗・階乗逆元の前計算の元 \(\mathrm{O}(A+B+C+D)\) 程度で計算することができて十分高速です。(実装例は省略します。)
posted:
last update:
