1. 程式人生 > >UVA 679 Dropping Balls

UVA 679 Dropping Balls

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