# Sorting# Greedy# Time Conversion

b972 - 1.任務一->接力賽

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算 t 個組在 n 個關卡中的總時間,並按照時間由小到大的順序輸出每個組的總時間。輸入格式為 n t,後續 n 行每行包含 t 個時間,格式為 m:s (分鐘:秒)。

解題思路

程式首先讀取 nt 的值。然後,使用巢狀迴圈讀取每個組在每個關卡的花費時間,並將其轉換成分鐘數,加到 total 陣列中。total 陣列的第 j 個元素儲存第 j 組的總時間(以秒為單位)。

接著,程式使用冒泡排序演算法對 total 陣列進行排序,確保時間由小到大排列。最後,程式使用迴圈輸出排序後的 total 陣列中的每個元素。

複雜度分析

  • 時間複雜度: O(n * t * t) (由於使用了巢狀迴圈讀取輸入和冒泡排序)
  • 空間複雜度: O(t) (用於儲存每個組的總時間)

程式碼

#include <stdlib.h>
#include <stdio.h>
int main(){
	int n, t;
	while (scanf("%d%d",&n,&t) != EOF) {
		int total[20] = {0};
		int m, s;
		int i, j;
		for (i = 0; i < n; i++)
			for (j = 0; j < t; j++) {
				scanf("%d:%d", &m, &s);
				total[j] += (m * 60) + s;
			}
		for (i=0;i<t-1;i++)
			for (j=i+1;j<t;j++) {
				if (total[i] > total[j]) {
					total[i]^=total[j];
					total[j]^=total[i];
					total[i]^=total[j];
				}
			}
		for (i = 0; i < t; i++)
			printf("%d\n", total[i]);
	}
}

Discussion