#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
    int i,d;
    cin>>d>>i;
    int k=1;
    for(int j=1;j<d;j++){
        if(i%2){
            k=k*2;
            i=(i+1)/2;
        }else{
            k=k*2+1;
            i=i/2;
        }
    }
    
    cout<<k;
    return 0;
}

考虑全部小球,一部分下落到左边,一部分下落到了右边,各为i/2个(I为奇数时候,左边为(i+1)/2个),当I为奇数的时候落在左边,偶数时候落在右边,依次递推的下去,经过D-1次就能找到最后一个小球的位置。

posted on 2017-03-25 22:20  kapike  阅读(95)  评论(0)    收藏  举报