a249: 00679 - Dropping Balls
標籤 : Divide And Conquer tree
通過比率 : 83% (175 人 / 212 人 ) (非即時)
評分方式:
Tolerant

最近更新 : 2012-11-12 22:29

內容

有K個球從一完整二元樹(fully binary tree, FBT)的樹根(root)一個一個往下掉。當這個球遇到非終端節點時,可能往左子樹跑,也可能往右子樹跑,如此直到這顆球到達終端節點(也就是樹葉)為止。至於在非終端節點時球該往左或往右的決定乃是由2個值 true, false 來控制的。如果這非終端節點的現在的值為 false,則球來的時候會往左子樹走,但是這個值會變為 true。如果這非終端節點的現在的值為 true,則球來的時候會往右子樹走,但是這個值會變為 false。請注意:一開始時所有非終端節點的值均為 false。另外,在完整二元樹中所有的節點被依序編號,從上(深度 = 1)到下,由左到右。請參考下圖。

舉例來說,上面的圖為深度為4的完整二元樹。第一顆球往下掉會經過節點1、2、4最後落在節點8中。第二顆球往下掉則會經過節點1、3、6最後落在節點12中。第三顆球往下掉會經過節點1、2、5最後落在節點10中。

給你完整二元樹的深度D以及落下的第I個球,請你寫一個程式算出第I個球落在終端節點的編號。

輸入說明

輸入的第一列有一個整數,代表以下有幾組測試資料。

每組測試資料一列有2個整數D,I(2 <= D <= 20, 1 <= I <= 524288)。

輸出說明
對每組測試資料輸出一列,第I個球落在終端節點的編號。
範例輸入
5
4 2
3 4
10 1
2 2
8 128
範例輸出
12
7
512
3
255
測資資訊:
記憶體限制: 512 MB
公開 測資點#0 (100%): 1.0s , <50M
提示 :

大量的測資 不是為了讓你吃TLE,

而是想要你做出 速度很快的程式 !

挑戰自己的極限吧! 

 

* Lucky 貓翻譯 

 

// 2011 / 10 / 16  9:30 暫時調寬時間限制 1s -> 3s 

// 2011 / 10 / 17 12:26 暫時調寬時間限制 3s -> 1s 

// 建議使用 較快的輸出輸入 printf() 和 scanf() 

標籤:
Divide And Conquer tree
出處:
UVa679 [編輯:
stanley17112000 (Stanley)
]


編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」