记录编号 224902 评测结果 A
题目名称 [UVa 679]小球下落 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-02-16 19:10:49 内存使用 0.29 MiB
显示代码纯文本
#include<cstdio>
#include<cstring> 
bool goleft[22];
int main(){
	freopen("fballs.in","r",stdin);
	freopen("fballs.out","w",stdout);
	int t;
	scanf("%d",&t);
	while(t--){
		memset(goleft,0,sizeof(goleft));
		int d,I;
		scanf("%d %d",&d,&I);
		int h = d-1;
		I--;
		for(int i = 0;i<h;++i){
			goleft[i]=I%2;
			I/=2;
		}
		int pos = 0,w = 1;
		for(int i = h-1;i>=0;--i){
			if(goleft[i])pos+=w;
			w<<=1;
		}
		pos+=1;//落在最低一层自左向右第几个 
		printf("%d\n",pos+(1<<(h))-1);
	}
	fclose(stdin);fclose(stdout);
	return 0;
}