
#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次就能找到最后一个小球的位置。
浙公网安备 33010602011771号