二叉树之小球下落

样例输入:

4   2

3   4

10   1

2   2

8   128

16   12345

样例输出:

12

7

512

3

255

36358

 

 

 

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <queue>
using namespace std;
const int MAXD = 20;
int s[1<<MAXD] ;
int main()
{
    int D,I;
    while( scanf( "%d%d" , &D , &I ) ==2 )
    {
       memset( s,0,sizeof(s) );
       int k , n = ( 1<<D ) - 1;
       for( int i=0; i<I ; i++ )
       {
          k = 1;
          for( ; ; )
          {
             s[k] = !s[k];
             k = s[k] ? k*2 : k*2+1;
             if( k>n ) break;      
          }    
       }      
       printf( "%d\n" , k/2 );
    }
    system("pause");
 return 0;
}

 

posted @ 2011-12-09 22:44  Maki Horikita  阅读(283)  评论(0)    收藏  举报