けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

JOI 予選 2013 A - 宿題 (AOJ 0576) (8Q, 難易度 1)

切り上げ処理!

問題概要

冬休みは  L 日ある。

  • 国語の宿題は  A ページあって、1 日に  C ページ進めることができる
  • 算数の宿題は  B ページあって、1 日に  D ページ進めることができる

1 日に国語と算数を両方進めることもできる。冬休みのうち、宿題をやらないで住む日数の最大値を求めよ。

制約

  •  2 \le L \le 40
  •  1 \le A, B \le 1000
  •  1 \le C, D \le 100

考えたこと

まずは、国語の宿題、算数の宿題が、それぞれ最速でどれだけの日数で終わらせられるかを考えましょう。このように

「全部で  A あるものを、 C ずつ削っていったときに、何回で削り切れるか」

というような処理は「切り上げ処理」とも呼ばれます。切り上げ処理については、次の記事に色々書きました。

drken1215.hatenablog.com

切り上げ処理をすると、

  • 国語の宿題をこなすのにかかる日数:(A + C - 1) / C (日)
  • 算数の宿題をこなすのにかかる日数:(B + D - 1) / D (日)

と求められます。これらの最大値をとって、 L から引くことで答えが求められます。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int L, A, B, C, D;
    cin >> L >> A >> B >> C >> D;

    int koku = (A + C - 1) / C, san = (B + D - 1) / D;
    cout << L - max(koku, san) << endl;
}