某地區計程車業者的營業時間為「早上 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 8 | 20 |
1 2 12 13 | 25 |
2 1000 7 17 | 2520 |
20 60 13 15 | 260 |
150 36 17 18 | 850 |
150 36 17 19 | 1035 |
1000 1000 20 23 | 8155 |
解題思路
預設答案為 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