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