パナソニックプログラミングコンテスト(AtCoder Beginner Contest 195) B - Many Oranges
問題
考察
重要な点としては
- Aグラム以上Bグラム以下というみかんの重さに下限と上限があること。
- みかんの重さが整数とは限らない。
- 重さの合計がぴったりW(キログラム単位)であること。
みかんの個数Nが分かっている場合、
が成り立てば、N個のみかんで重さの合計をぴったりWにできる。
公式解説で
(この考察内だとを式変形したものと同じ)
を見たとき、なぜこれが成り立つと重さをぴったりWにできるんだ?と思ったが、
は1000Wをみかんの個数でN等分したときのみかん1個の重さ。
N個の中で1個の重さを増やすと他の1個以上のみかんの重さが減り、逆に1個の重さを減らすと他の1個以上のみかんの重さが増えます。
(なぜなら、重さの合計は変わらずWで、みかんの重さの配分を変えているだけだから。)
このN個のみかんの重さの配分をいくら変えても、を中心に重さの最小値Xと最大値Yの差が広がり
の範囲に当てはまらない場合が出てきてしまう。
なので、XとYの差が最も小さくなるがA以上、B以下であるかどうかを判定している。
制約の から
みかんの個数は1~1000000までの範囲だと分かる。
あとはこの範囲の中でみかんの個数で全探索をしながら、が成り立つかをチェックして
最大の個数、最小の個数を出力する。