# Simulation# Time Calculation

e808 - 3.不再傻傻等公車 (Bus)

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據公車的起始時間和各站之間的行駛時間,計算出指定站牌的到站時間。輸入包含公車行經的站牌數量、公車的起始時間,以及各站之間的行駛時間。最後,題目會要求輸出特定站牌的到站時間,直到輸入為 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"; 
	}
}

Discussion