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

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

JOI 予選 2017 A - 電子レンジ (AOJ 0630) (8Q, 難易度 1)

算数的な問題。頭がごっちゃになりやすいので頑張って求めよう。

問題概要

一般に、0 ℃ 未満の肉は凍っていて、0 ℃ の肉は凍っていることと凍っていないことがありえて、0 ℃ より温度の高い肉は凍っていない。また、

  • 凍っている肉を 1 ℃ 温めるには、 C のエネルギーを要する
  • 凍っている 0 ℃ の肉を凍っていない 0 ℃ の肉にするには、 D のエネルギーを要する
  • 凍っていない肉を 1 ℃ 温めるには、 E のエネルギーを要する

 A ℃ の肉を  B ℃ に温めたい。 A \lt 0 のとき、はじめ肉は凍っていて、 A \ge 0 のときは凍っていないことが保証される。必要なエネルギーはいくらか。

制約

  •  -100 \le A \le 100
  •  1 \le B \le 100
  •  A \lt B

考えたこと

 A \lt 0 のときと、 A \ge 0 のときとで状況が異なるので分けて考えましょう!

 A \ge 0 のとき

こっちの方がわかりやすい。凍っていない肉を  B - A ℃ 分温める必要があります。凍っていない肉を 1 ℃ 温めるには E のエネルギーを要するので、必要なエネルギーは

 E \times (B - A)

と求められます。

 A \lt 0 のとき

まず、凍っている  A ℃ の肉を凍っている 0 ℃ の肉にするのに必要なエネルギーは

 C \times (-A)

と求められます( 0 - A = -A ℃ 温める必要があるため)。次に、その肉を凍っていない 0 ℃ の肉にするのに必要なエネルギーは

 D

です。最後に、凍っていない 0 ℃ の肉を凍っていない  B ℃ の肉にするのに必要なエネルギーは

 E \times B

と求められます。

以上をまとめて、求めるエネルギーは

 C \times (-A) + D + E \times B

です。

コード

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

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

    if (A >= 0) cout << E * (B - A) << endl;
    else cout << C * (-A) + D + E * B << endl;
}