切り上げ処理!
問題概要
鉛筆を 本以上買いたい。買うための手段として、次の 2 セットがある。いずれかのセットを選び、選んだセットをいくつか購入することとする。両方のセットを選ぶことはできない。
- セット X:1 セットあたり 本あり、1 セット 円である
- セット Y:1 セットあたり 本あり、1 セット 円である
本以上の鉛筆を揃えるのに必要な金額の最小値を答えよ。
制約
考えたこと
セット X について考えよう。なお、セット Y についても同様に考えられる。
さて、買う必要のあるセット数は次のように考えられる。ここで、 を で割ったときの商を とする。
- が で割り切れるとき: セット
- が で割り切れないとき: セット( セット買った時点で足りないため)
このように、割り切れないときだけ商を 1 増やす処理は切り上げ処理などとも呼ばれる。実は、次のようにワンライナーで書ける。
(N + A - 1) / A
このように書ける理由については、次の記事を参照。
よって、セット X で 本以上の鉛筆を揃えるのに必要な金額は
(N + A - 1) / A * B
と表せる。セット Y も同様である。小さい方を答えればよい。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N, A, B, C, D; cin >> N >> A >> B >> C >> D; int priceX = (N + A - 1) / A * B; int priceY = (N + C - 1) / C * D; cout << min(priceX, priceY) << endl; }