日期:2025年2月8日
ZeroJudge 題目連結:e808. 3.不再傻傻等公車 (Bus)
解題想法
儲存公車到站時刻的串列,先將發車時刻存在開頭,之後各站牌的到站時間編號對應到串列的索引值,這樣寫比較方便。
Python 程式碼
使用時間約為 19 ms,記憶體約為 3.3 MB,通過測試。
n = int(input()) # 公車站牌數量
h, m = map(int, input().split()) # 發車時刻 h:m
time = [[h, m]] + [[0, 0] for _ in range(n)] # 公車到站時刻
for i in range(1, n+1): # 讀取 n 行行駛時間
d = int(input()) # 行駛時間
mc = time[i-1][1] + d # 到站時刻 hc:mc
hc = time[i-1][0]
if mc >= 60: # 如果 mc 大於等於 60
hc += mc//60 # 更新 hc
mc %= 60 # 更新 mc
if hc >= 24: hc %= 24 # 如果 hc 大於等於 24,更新 hc
time[i] = [hc, mc] # 更新 time[i]
check = list(map(int, input().split())) # 要查詢的站牌編號,最後一項是 0
for ch in check[:-1]: # 依序從 check 讀取要查詢的站牌編號,不含最後一項
print(f"{time[ch][0]:02d}:{time[ch][1]:02d}")
C++ 程式碼
因為題目要求要用2位整數輸出時、分,如果只有1位數左側要補0,用 printf 比較方便。使用時間約為 2 ms,記憶體約為 336 kB,通過測試。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int n; scanf("%d", &n); // 公車站牌數量
int h, m; scanf("%d %d", &h, &m); // 發車時刻 h:m
int time[n+1][2]; // 公車到站時刻
memset(time, 0, sizeof(time));
time[0][0] = h; time[0][1] = m;
for(int i=1; i<=n; i++) { // 讀取 n 行行駛時間
int d; scanf("%d", &d); // 行駛時間
int mc = time[i-1][1] + d; // 到站時刻 hc:mc
int hc = time[i-1][0];
if (mc >= 60) { // 如果 mc 大於等於 60
hc += mc/60; // 更新 hc
mc %= 60; // 更新 mc
}
if (hc >= 24) hc %= 24; // 如果 hc 大於等於 24,更新 hc
time[i][0] = hc; time[i][1] = mc; // 更新 time[i]
}
while(true) { // 讀取要查詢的站牌編號,讀到 0 結束
int ch; scanf("%d", &ch); // 要查詢的站牌編號
if (ch == 0) break;
printf("%02d:%02d\n", time[ch][0], time[ch][1]);
}
return 0;
}
沒有留言:
張貼留言