d985 - Gran Turismo 5
題目描述
題目要求讀取多組測試資料,每組資料代表一條賽道。對於每條賽道,題目會給予多圈的比賽時間,時間以分鐘和秒表示。程式需要計算出該賽道的最佳單圈時間(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;
}
}
}