從一個完全二元樹(fully binary tree) FBT 的根結點開始一個一個的丟下 K 個球,球往下掉落途中要嘛沿著左子樹的路徑,要嘛沿著右子樹的路徑,直到它停在 FBT 的葉節點之一。
為了決定球的移動方向,在每個非終端節點中有一個標誌(flag),該標誌具有假(false)或真(true)兩個值其中之一。
一開始所有標誌值都是 false,當球訪問一個非終結節點時,如果該節點的標誌值為 false,那麼球會先切換這個標誌的值,即從 false 到 true,然後沿著這個節點的左子樹繼續往下移動;反之,它會切換這個標誌的值從 true 到 false,並向這個節點的右子樹向下移動。這裡 FBT 的所有節點都按順序編號,從1 開始,深度為 1 的節點,然後是深度 2 的節點,依此類推,任何深度上的節點都是從左到右編號的。
下圖為一個最大深度為 4 的 FBT,其節點編號為 1、2、3、4、…、15,由於所有標誌值最初都設定為假,因此第一個落下的球將在以下位置切換標誌的值,節點 1、2、4,最終停在節點 8。
第二個被扔下的球將在節點 1、3、6 處切換標誌的值,並在節點 12 停止。顯然,第三個球被扔下時將在節點 1、2、5 處切換標誌的值,然後在節點 10 處停止。
在本題的每個測試中將給出兩個值,第一個值 D 是 FBT 的最大深度,第二個是 I,代表共有 I 個球將掉落,兩個參數 D 和 I 的範圍如下:2 ≤ D ≤ 20、1 ≤ I ≤ 524288,請寫出一個程式來判定每個各自獨立的測試例中最後一個球的停止位置 P。
輸入的第一列包含一個數字 N,表示測試例數量,每一列有兩個數字以空白隔開,前一個數字代表 D,後一個數字代表 I。
依順序印出每個測試例中最後一個球的停止位置,每個數字佔一列。
5 4 2 3 4 10 1 2 2 8 128
12 7 512 3 255
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
沒有發現任何「解題報告」 |