你突然想看場電影,於是你上網查了一下附近電影院的電影時刻表。你不想等太久,所以決定找一部最早開始放映的電影來看。不過考慮到你還需要抵達電影院並買票和爆米花,你需要預留至少 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