AtCoder Beginner Contest 235 G 問題 Gardens
問題
提出解答
問題の概要
株のリンゴの苗,
株のバナナの苗,
株のサクランボの苗がある. これらの苗を
個の庭に植える. ただし, 以下の条件を満たさなければならない.
- (a) 全ての庭には少なくとも1株以上の苗を植える.
- (b) 1つの庭に同種の果物の苗がない.
- (c) 全ての株を植える必要はない.
この条件を満たすような苗の植え方の数を求めよ.
制約
解法
包除原理の利用
包除原理を利用する.
有限集合 における
個の集合
に対して,
包除原理を利用するために, 集合 を考える. 以下のように設定するのが良い
- 集合
を条件 (b), (c) を満たすような果物の苗の植え方とする.
- 集合
を
番目の庭には1つ以上の果物の苗を植えているような植え方とする.
このとき, は
として,
番目の庭には果物を植えていないような植え方の数になる. この場合の数は対称性から,
のみによる.
よって, の場合における
の値を
とすると,
になる.
なお, 以降では説明を簡単にするのため, とする. つまり,
を求める.
を求める.
は
個の庭に制限した問題において, (b), (c) を満たすような場合の数である. ここで, (b), (c) は各果物ごとに独立に考えることができる.
株の苗を持っている果物について考える.
個の庭に重複なく高々
株を植えることになる. このような苗の植え方
は,
となる.
そして, である.
ここで, 必要な値は の
個の値であるが, これを愚直に計算しようとしても
で間に合わない. しかし, 二項係数における性質を利用することにより, 高速に求めることができるようになる.
二項係数の性質
今回の性質で利用する性質を述べる.
を非負整数とする. このとき,
(証明)
のとき
である.
のとき
である.
のとき
である.
を高速に求める.
上で示した性質から, 以下のようにして を高速に求めることができる.
証明
のとき,
である.
のときに成り立っているとする.
のとき
となる.
解法のまとめ
よって, なので,
であり, 上で求めた関係式を利用して, における
の前計算の下, 解答を
で求めることができる.