ZeroJudge H659: 計程車 (Taxi)

某地區計程車業者的營業時間為「早上 7 時」至「晚上 23 時」,其計算費率的方式如下:

  • 計程運價:起程 2 公里內皆為 20 元,續程每滿 1 公里加 5 元。
  • 延滯計時運價:延滯時間每滿 2 分鐘加 5 元。
  • 夜間加成運價:若搭車時間跨越晚間 18 時至晚上 23 時,每一個時段的額外費用如下表:
時間搭乘總費用額外增加
晚間 18 時至 19 時185 元
晚間 19 時至 20 時195 元
晚間 20 時至 21 時205 元
晚間 21 時至 22 時215 元
晚間 22 時至 23 時225 元

給定某次載客的「行駛總公里數、車輛延滯時間、該次乘載的乘客上車、以及下車的時間點」,請你幫忙計算此次搭乘的總費用為多少

範例測資

範例輸入範例輸出
輸入僅有一列,包含四個整數 K (1 ≤ K ≤ 1000)、W (1 ≤ W ≤ 1000)、S、E (7
≤ S < E ≤ 23),依序代表行駛總公里數、車輛延滯時間 (以分鐘為單位)、乘客上
車以及下車的時間點 (以小時為單位)。
請輸出該次搭乘的總費用。
1 1 7 820
1 2 12 1325
2 1000 7 172520
20 60 13 15260
150 36 17 18850
150 36 17 191035
1000 1000 20 238155
ZeroJudge H659 範例測資

解題思路

預設答案為 20,將 K -= 2 後如果 K > 0 就將答案 += K * 5,之後再將答案 += W / 2 * 5。

宣告一個 Map<int, int>,Key 值存夜間時間的「開始」,Value 存對應的價錢。跑一個 For迴圈 從 S 到 E-1,將答案 += Map[目前跑到的小時]。

範例程式碼-ZeroJudge H659: 計程車 (Taxi)

#include <iostream>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int K, W, S, E, ans = 20;
    cin >> K >> W >> S >> E;
    K -= 2;
    if (K > 0) ans += K * 5;
    ans += W / 2 * 5;
    map<int, int>MAP;
    MAP[18] = 185;
    MAP[19] = 195;
    MAP[20] = 205;
    MAP[21] = 215;
    MAP[22] = 225;
    for (int i = S; i<E; i++) {
        ans += MAP[i];
    }
    cout << ans << "\n";
}

//ZeroJudge H659
//Dr. SeanXD

發佈留言