【ABC195 B】「Many Oranges」を解く【Python3】

「AtCoder」解説一覧へ

Aグラム以上 Bグラム以下のたくさんのみかんの中から、いくつか選びちょうどWキログラムにしたいとき、選んだみかんの個数として考えられる最小値と最大値を求める問題です。

提出
a, b, w = map(int, input().split())
w *= 1000

mi = w//b
ma = w//a

if w%b != 0:
    mi += 1

if mi > ma:
    print("UNSATISFIABLE")
else:
    print(mi, ma)

入力はすべて整数です。

最初にwを1000倍にしておきます。

みかんの個数の最小値を求める場合は、なるべく重いみかんを選ぶ必要があります。

w×1000 が一番重いみかんの重さ b(グラム)で割り切れる場合は、重いみかんのみを使うので、切り捨て計算したものが答えになります。

割り切れない場合は重いみかんを1個減らし、他の重さのみかんを2個足して w×1000 にするため、切り捨てたものより1個多くなります。

最大値を求める場合は、なるべく軽いみかんを使います。

一番軽いみかんa で割り切れなかった場合は、軽いみかんをそれより重いみかんと交換して合計値にすると考え、個数は切り捨て計算のままです。

最小値が最大値より大きくなってしまった場合、起こりえないため「UNSATISFIABLE」を出力します。

【ABC195】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です