【問題G07】瑞士制賽制。            [回前頁]

在體育類競賽的規則中,大家較熟悉的是「單敗淘汏制」,「雙敗淘汏制」,或是「任兩隊皆比一場的循環賽」。有一種情況:選手數很多,而又只在乎前幾名的名次時,又希望能合理調整大家的程度,以免有人因對手強弱懸殊,而造成不平。所以有了「瑞士制」的方法,例如圍棋、五子棋等就常用這種方法來作為競賽辦法!來快速找出實力較好的前幾名選手。

  瑞士制 是一個分配對手及將所有對方以實力排序的制度。它可在有限回合中反應出個棋手間實力的一種賽制。目的在找出最高水準的選手,而不在排所有選手的名次!與循環賽相比,準確性略低,但可大量減少比賽場次;而與淘汏賽相比,可以較準確,但只稍增一些場次。

簡單的說:第一輪比賽,可隨機配隊,而得到一半的勝者,一半的負者,第二輪則是勝者與勝者;負者與負者對下,…就是由每位選手「積分」(勝算2分,負算0分)相同,作為下一輪對下的對手。所以如果比完,若有人全勝,當然就是第一名了,若不幸有多人的積分相同時,則看各人的所擊敗的對手之積分合計作為「輔分」,按輔分的高低來區分名次,若又有同分,則並列、抽籤或參考其他方法來區分。

    這種賽制,若比賽人數為 N 個人,要找出第一名,因為全部選手都比完一場,可剩下一半的勝者,所以第一名要比賽的場次應該是M:M=int(log2(N-1))+1,如果隊伍多,每隊要比賽的場次已很多,且希望可減少總場次,則可先預定每人僅出賽(M-1)場,再由目前全勝的兩隊,由加賽來決定最後的總冠軍!)。假設有17-32人參賽,則在總冠軍的加賽前每人應出賽4場,當然若人數不是恰好32人,則有可能有某些人會因輪空,而少賽幾場就直接視為勝哦!現在假設你是某瑞士制競賽的主辦人,請由規劃的參賽人數N,來決定要告知每位選手要出賽的基本場數。

【輸入檔案格式】:第一行是一個整數K,表示有K組測試資料,而接下來的K行分別表示K組樣本。在每個樣本的一行有一個正整數N(N小於16385)

【輸出檔案格式】:如果有K組輸入,也就應有K組的輸出,將每一組的輸出結果印在一行。

【輸入檔案範例】

3

16384

17

32

【輸出檔案範例】

13

4

4