文章出處

樣例輸入:

4 2

3 4

10 1

2 2

8 128

16 12345

樣例輸出:12

7

512

3

255

36358

 1 //純粹模擬算法 
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 const int maxn = 20;
 7 int s[1<<maxn];                           //最大結點個數為2^maxn - 1 
 8 
 9 int main()
10 {
11     int D, I;
12     while(scanf("%d%d", &D, &I)==2)
13     {
14         memset(s, 0, sizeof(s));           //開關狀態 
15         int k, n = (1<<D) - 1;              //n是最大結點編號 
16         for(int i = 0; i<I; i++)          //連續讓I個小球下落。 
17         {
18              k = 1;
19              for(;;)
20              {
21                  s[k] = !s[k];
22                  k = s[k] ? k*2 : k*2 +1;   // 根據開關狀態選擇下落方向。 
23                  if(k>n) break;             //已經出界 
24              }
25         }
26         printf("%d\n", k/2);                
27     }
28     return 0;
29 }
30  
View Code

 優化算法

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int D, I;
 7     while(scanf("%d%d", &D, &I)==2)
 8     {
 9         int k = 1;
10         for(int i=0; i<D-1; i++)
11         if(I%2) 
12         {
13             k=k*2; I = (I+1)/2;
14         }
15         else
16         {
17             k=k*2+1; I/=2;
18         }
19         printf("%d\n", k);
20     }
21     return 0;
22 }
View Code

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()