UVA 679 Dropping Balls
阿新 • • 發佈:2019-02-21
http scan ping col div 需要 pin style 2個
思路:
因為小球落下後,開關的狀態就會改變,所以一個節點上的小球的去向,跟這個小球是第幾個到達此節點
有關系,也就是說,如果到達時是第奇數個,往左走,偶數個,就要往右走;
比如,如果是節點1,那麽我們可以知道,第一個小球(I=1)肯定是往左走,第二個小球(I=2)則是往右走;
也就是球到達的編號為奇數,則往左走,偶數往右走;
那麽如果是節點2呢,如果把節點2看成節點1,其實也有規律;
比如第5顆球,他是第五個到達節點1的球,接下來往左,第5/2+1=3(奇)個到達節點2的球,
接下來往左,3/2+1=2(偶),第2個到達節點4,下面第2/2=1個到達節點9;
說來說去就是,球到達每個節點的編號決定了它下一步的方向,於是,我們只需要模擬最後一顆球,
就可以得到結果。
還要註意,二叉樹的結構是
所以節點編號計算是往左k*2,往右k*2+1。
1 #include<cstdio> 2 int main() { 3 int T, D, I; 4 scanf("%d", &T); 5 while (T--) 6 { 7 scanf("%d%d", &D, &I); 8 int k = 1;//k是當前節點的編號 9 for (int i = 0; i < D - 1; i++) 10 {11 if (I % 2) //奇數,是往左走的,第(I + 1) / 2個小球 12 { 13 k = k * 2; 14 I = (I + 1) / 2; 15 } 16 else //偶數,往右,第I/2個 17 { 18 k = k * 2 + 1; 19 I /= 2; 20 } 21 } 22 printf("%d\n", k); 23 } 24 return 0; 25 }
UVA 679 Dropping Balls