【問題G20】魔術數字。 [回前頁]
每當職棒球季進行到尾聲,球隊間互相為了獲得冠軍而廝殺之際,魔術數字便成為棒球迷的焦點。到底什麼是魔術數字呢?魔術數字什麼時候點亮?魔術數字要怎麼計算?請看以下的介紹。
一個聯盟中有許多球隊要爭取排名第一的位子。將球隊的勝場數除以已賽場次即可得到勝率,而球隊之間的戰績排行就以勝率為依據來做比較。假設戰績領先隊為A隊,其對B隊的魔術數字mAB存在的意義在於,B隊已經無法自力阻止A隊封王。若B隊剩餘賽程全勝時(包括對A隊所有剩餘賽事皆獲得勝利),而A隊只需要對其他隊伍共贏得mAB場比賽,mAB小於或等於(A隊所剩的比賽場次 – A隊與B隊剩餘對戰場次),使A隊在戰績排行上仍然領先B隊的話,則我們會說A隊對B隊的魔術數字已點亮,而點亮的魔術數字即是mAB。若mAB大於(A隊所剩的比賽場次 – A隊與B隊剩餘對戰場次)時,此時A隊對B隊的魔術數字尚未出現。換句話說,B隊只要一鼓作氣連勝到底,戰績就可以超越或追平A隊,不需要巴望著A隊敗給其他球隊。
舉例來說明魔術數字的計算方法:A隊應賽50場,已賽35場,戰績26勝9敗,勝率0.743。B隊應賽50場,已賽34場,戰績20勝13敗1和,勝率0.606。而A隊與B隊剩餘賽程為3場。要計算A隊對B隊的魔術數字mAB,先假設落後隊B隊剩餘賽程全勝,也就是B隊贏得剩餘16場比賽,戰績36勝13敗1和,勝率0.735。而A隊輸掉3場與B隊的對戰,戰績26勝12敗,剩餘賽事15-3=12場。以討論的方式來檢查A隊至少要再贏m場,勝率就必定超過B隊。
m |
A隊勝率 |
8 |
0.68 < 0.735 |
9 |
0.7 < 0.735 |
10 |
0.72 < 0.735 |
11 |
0.74 > 0.735 |
由於討論所得到的m為11,小於12 (A隊剩餘場次 – A隊與B剩餘對戰場次=15-3=12),因此A隊對B隊魔術數字已點亮,且魔術數字為11。當A隊對B隊的魔術數字歸零時,表示B隊的戰績已經篤定無法超越A隊(與冠軍無緣)了。一般而言,只有領先隊伍與第二名隊伍間的魔術數字較為常用。但實際上,領先隊對所有其他隊伍都可能存在一個魔術數字。今天,你的任務是寫一個魔術數字計算程式。輸入每個球隊的隊名,戰績,和球隊間的剩餘對戰場次,你的程式除了能依球隊戰績排行輸出戰績表以外,還可以將求得的魔術數字輸出。
輸入檔說明
輸入檔可能包含多筆的測試資料。
每一筆測試資料的第一行有兩個數字n和g。第一個數字n (2<=n<=6)表示聯盟的球隊數。第二個數字g (10<=g<=100)則表示一個球隊在一個球季應出賽場次。第二行開始一共n行,每一行依序包含了一隻球隊隊名,勝場數,和局數,敗場數。球隊的隊名由英文字母組成,最長為9個字母。勝場數,和局數,和敗場數皆為正整數,且其和不會超過g。(你可以假設n隻球隊中,必定只有一支球隊勝率最高。)
假設各球隊依在上述資料中出現順序分別編號為1,2,…,n。在接下來的n行中,每一行有n個數字。第i行的第j個數字表示第i支球隊與第j支球隊的剩餘場數(1<= i,j <=n)。你可以假設測試資料都是合乎常理的數字,反映現實生活中計算魔術數字的情形。例如第i行的第i個數字一定為0,因為自己球隊不可能跟自己球隊打。而第i行的第j個數字必定等於第j行的第i個數字。另外,一支球隊的對各隊的剩餘場數加上該球隊的已勝場數,和局數,以及已敗場數必定等於g。
當測試資料第一行的輸入n和g皆為0時,表示測試資料全部結束,程式不需要對這行輸入作處理。
輸出檔說明
對於每一筆測試資料,請輸出一排版過的戰績表。依n支球隊的戰績排名順序輸出n行。除了第1名球隊以外,若發生勝率相同的情形,請依球隊在原資料的出現順序為輸出順序,但其排名則應並列。格式請參考範例輸出。隊名,勝率,魔術數字分別以一個空格來間隔,而隊名部分不足9個字元的部分則需填入空格。勝率固定輸出到小數點後三位(四捨五入)。第一名球隊不需要輸出魔術數字,請你分別計算出第一名球隊對其他球隊的魔術數字。若對其他球隊的魔術數字尚未點亮,請輸出”--”。若魔術數字已點亮,則輸出”M”以及該數字。測試資料之間請留一個空行。
範例輸入
4 6
Cubs 4 0 0
RedSoxs 2 0 2
Dodgers 2 0 2
Yankees 0 0 4
0 0 0 2
0 0 2 0
0 2 0 0
2 0 0 0
6 50
Banana 25 3 8
Guava 22 4 10
Cow 18 3 12
Fish 18 1 14
Moon 6 3 25
Monkey 6 4 26
0 4 3 4 3 0
4 0 0 3 4 3
3 0 0 6 4 4
4 3 6 0 1 3
3 4 4 1 0 4
0 3 4 3 4 0
0 0
範例輸出
1:Cubs 1.000
2:RedSoxs 0.500 M1
2:Dodgers 0.500 M1
4:Yankees 0.000 M0
1:Banana 0.758
2:Guava 0.688 --
3:Cow 0.600 M11
4:Fish 0.563 M9
5:Moon 0.194 M0
6:Monkey 0.188 M0