e808 - 3.不再傻傻等公車 (Bus)
題目描述
題目要求根據公車的起始時間和各站之間的行駛時間,計算出指定站牌的到站時間。輸入包含公車行經的站牌數量、公車的起始時間,以及各站之間的行駛時間。最後,題目會要求輸出特定站牌的到站時間,直到輸入為 0 為止。
解題思路
這題主要使用模擬的方式來計算到站時間。首先,讀取公車的起始時間(小時和分鐘)。然後,對於每一站,將前一站到該站的行駛時間加到分鐘數上。如果分鐘數超過 60,則將多餘的分鐘數轉換為小時,並加到小時數上。小時數需要對 24 取模,以確保時間在 0-23 小時的範圍內。將計算出的到站時間儲存在一個二維陣列中。最後,根據輸入的查詢站牌編號,從陣列中讀取對應的到站時間,並以 hh:mm 的格式輸出。為了確保輸出格式正確,需要對小時和分鐘進行格式化,如果小時或分鐘小於 10,則在前面補零。
複雜度分析
- 時間複雜度: O(n + p),其中 n 是站牌數量,p 是查詢的站牌數量。
- 空間複雜度: O(n),用於儲存所有站牌的到站時間。
程式碼
#include <iostream>
using namespace std;
int m,h,n,t;
int main(){
cin >> n;
int ans[n][2];
cin >> h >> m;
for(int i=0;i<n;++i){
cin >> t;
m+=t;
while(m>=60){
m-=60;
++h;
}
h%=24;
ans[i][0]=h;
ans[i][1]=m;
}
while(cin >> t){
if(t==0)break;
--t;
if(ans[t][0]<10){
cout << 0;
}
cout << ans[t][0] << ":";
if(ans[t][1]<10){
cout << 0;
}
cout << ans[t][1] << "\n";
}
}