ZeroJudge K570: 關於友善時光這件事

相信精打細算的你一定知道,每家超商在不同時段會提供不同即期品優惠。
以下是優惠相關資訊:

超商名稱超商編號優惠時段優惠價格
小萊018:00 – 00:007 折
你家110:00 – 17:00 / 17:00 – 00:007 折
-4210:00 – 17:00 / 20:00 – 00:0065 折
歐給316:30 – 22:306 折

給定 N 筆消費明細,

每筆消費明細以 {id, h, m, a} 表示
分別代表購入超商編號 id、購入時間 h 時 m 分、購入商品的原始價格 a

你可以假定只要是處於該超商優惠時段,則必定只會購入有優惠的即期商品。

請協助計算 N 筆消費明細,經過優惠後的實際消費總額。
其中對於每筆消費,小數點後可無條件捨去

範例測資

範例輸入範例輸出
第一行有一個正整數 N,代表消費明細數量
1 ≤ N ≤ 1000
接著有 N 行,每行有四個整數 id, h, m, a,
代表超商編號、購入小時、購入分鐘、購入商品原始價格
0 ≤ id ≤ 3
0 ≤ h ≤ 23
0 ≤ m ≤ 59
0 ≤ a ≤ 1000
經過優惠後的實際消費總額,
其中對於每筆消費,小數點後可無條件捨去。
4
0 19 30 100
1 19 30 100
2 19 30 100
3 19 30 100
300
2
0 0 0 100
3 16 0 100
170
ZeroJudge K570 範例測資

解題思路

將目前時間轉換成「分鐘」這個單位,並且使用判斷式時也將優惠的時段轉換成「分鐘」。

範例程式碼-ZeroJudge K570: 關於友善時光這件事

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N, ans = 0;
    cin >> N;
    for (int i = 0; i<N; i++) {
        int id, h, m, a;
        cin >> id >> h >> m >> a;
        int min = m + (h*60);
        if (id == 0) {
            if (min >= 1080 || min == 0) ans += a*0.7;
            else ans += a;
            continue;
        }
        if (id == 1) {
            if (min >= 600 || min == 0) ans += a*0.7;
            else ans += a;
            continue;
        }
        if (id == 2) {
            if ((min >= 600 && min <= 1020) || min >= 1200 || min == 0) ans += a*.65;
            else ans += a;
            continue;
        }

        if (min >= 990 && min <= 1350) ans += a*.6;
        else ans += a;
    }
    cout << ans << "\n";
}

//ZeroJudge K570
//Dr. SeanXD

發佈留言