【AtCoder】ABC 465 B - Parking 2

atcoder.jp favicon

実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 56 / NoviSteps: 6Q / 配点: 200 点

問題概要

ある駐車場に駐車するときの料金は以下の通りである。

  • LL 時ちょうどから RR 時ちょうどまでのあいだは、11 時間停めるごとに XX の料金がかかる
  • 上に該当しない時間のあいだは、11 時間停めるごとに YY の料金がかかる

この駐車場に、日をまたぐことなく車を AA 時ちょうどから BB 時ちょうどまで停めたとき、料金はいくらになるか求めよ。

制約

  • 1X,Y10001 \leq X, Y \leq 1000
  • 1L<R231 \leq L < R \leq 23
  • 1A<B231 \leq A < B \leq 23
  • 入力される値はすべて整数

考察

駐車時間のうち、1時間当たりの駐車料金が XX になる時間は、

max(0,min(B,R)max(A,L))\max(0, \min(B, R) - \max(A, L))

で計算できる。

また、1時間当たりの駐車料金が YY になる時間は、駐車時間から上記の時間を除いたものとなる。

以上を適切に計算すればOK。

実装例

CPP
1.#include <bits/stdc++.h>
2.using namespace std;
3.
4.// ======================================== //
5.
6.int main()
7.{
8. int X, Y, L, R, A, B;
9. cin >> X >> Y >> L >> R >> A >> B;
10.
11. int time_x = max(0, min(B, R) - max(A, L));
12. int time_y = (B - A) - time_x;
13.
14. cout << time_x * X + time_y * Y << endl;
15.
16. return 0;
17.}
atcoder.jp favicon

実装時間: 10分

コメント

制約は整数かつ小さいので、forループで数えていっても構わない。