# Simulation# Basic Calculation

d985 - Gran Turismo 5

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取多組測試資料,每組資料代表一條賽道。對於每條賽道,題目會給予多圈的比賽時間,時間以分鐘和秒表示。程式需要計算出該賽道的最佳單圈時間(Best Lap)和平均圈速(Average)。平均圈速需要將所有圈速加總後除以圈數,並將結果向下取整。

解題思路

程式首先讀取測試資料組數 N。然後,對於每一組測試資料,讀取圈數 M,並讀取 M 圈的比賽時間(分鐘 A 和秒 B)。程式會計算出最佳單圈時間(最小的 A*60 + B)和所有圈速的總和。計算平均圈速時,先將總秒數除以圈數,然後計算分鐘數和剩餘秒數。最後,程式按照題目要求的格式輸出最佳單圈時間和平均圈速。

複雜度分析

  • 時間複雜度: O(N * M),其中 N 是測試資料組數,M 是每組資料的圈數。程式需要遍歷每一組資料的每一圈時間。
  • 空間複雜度: O(1),程式只使用了常數級別的額外空間來儲存變數。

程式碼

#include <iostream>

using namespace std;

int main (){
	
	int N=0;
	int X=0;
	int A,B=0;
	int M,S=0;
	int t=0; 
	int m=0;
	while(cin >> N){
		for(int i=1;i<=N;i++){
			A=0;
			B=0;
			M=0;
			S=0;
			t=1000000;
			m=0;
			cin >> X;
			for(int j=1;j<=X;j++){
				cin >> A >> B;
				S+=A*60;
				S+=B;
				if((A*60+B)<t){
					t=A*60+B;
				}
			}
			S/=X;
			while(S>=60){
				M++;
				S-=60;
			}
			while(t>=60){
				m++;
				t-=60;
			}
			cout << "Track " << i << ":" << endl;
			cout << "Best Lap: "  << m << " minute(s) " << t << " second(s)." << endl;
			cout << "Average: "  << M << " minute(s) " << S << " second(s)." << endl;
			
		}
		
	}
	
	
}

Discussion