ZeroJudge N630: 電影院 (Cinema)

你突然想看場電影,於是你上網查了一下附近電影院的電影時刻表。你不想等太久,所以決定找一部最早開始放映的電影來看。不過考慮到你還需要抵達電影院並買票和爆米花,你需要預留至少 20 分鐘的時間 (從現在開始算起)。請撰寫一個程式,給定現在的時間和一系列電影開始的時間 (電影時刻已經排序),找出你最早可以觀看的電影時刻。電影時刻以 24 小時制表示。

範例測資

範例輸入範例輸出
第一列為一個正整數 N (1 ≤ N ≤ 1000),表示電影時刻表中的電影數量。
接下來 N 列,每列代表一部電影的開始時間,格式為 HH MM (0 ≤ HH < 24、1 ≤ MM < 60)。
第 N+2 列代表現在時間,格式為 HH MM (0 ≤ HH < 24、1 ≤ MM < 60)。
輸出時間 HH MM,代表最早可以觀看的電影時刻。如果沒任何電影可以看
(即所有電影的開始時刻都早於現在時刻加上 20 分鐘),則輸出「Too Late」。
3
14 50
15 05
16 00
14 30
14 50
2
23 15
23 20
23 00
23 20
1
09 00
10 00
Too Late

解題思路

將所有的時間換算成分鐘這個單位,並且將現在的時間 +20 分鐘。從最前面開始判斷,如果時段 >= 現在時間,就可以輸出這個時間。

如果是用整數來收資料的話輸出時輸出個位數時需要在前面加一個 0。

範例程式碼-ZeroJudge N630: 電影院 (Cinema)

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

string output(int N)
{
    if (N < 10) return "0" + to_string(N);
    return to_string(N);
}

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    vector<pair<int, int>>time;
    for (int i = 0; i<N; i++)
    {
        int H, M;
        cin >> H >> M;
        pair<int, int>T;
        T.first = H;
        T.second = M;
        time.push_back(T);
    }
    int H, M, T;
    cin >> H >> M;
    T = (H*60) + M + 20;
    bool ok = false;
    for (int i = 0; i<N; i++)
    {
        int calc = (time[i].first * 60) + time[i].second;
        if (calc >= T)
        {
            cout << output(time[i].first) << " " << output(time[i].second) << "\n";
            ok = true;
            break;
        }
    }
    if (!ok) cout << "Too Late\n";
}

//ZeroJudge N630
//Dr. SeanXD

發佈留言