UVA 679

题目不难,但是要总结规律。对于第一个节点,第一个球肯定是向左的,第二个球向右。然后第三个球向左,第四个球向右,这样依次类推,那么对于根节点的左孩子,那么根节点的第一个球肯定是向左,根节点的第三个球是向右,那么根节点的第一个球相对与左孩子而言也是其第一个球,根节点的第三个球相对于左孩子而言是第二个球,同理,对于根节点的右孩子,根节点的第二个球是其第一个球,第四个球是其第二个球,那么依次类推,对于根节点的第i个球,如果i为奇数,那么该球就向左边下落,对于左孩子而言是其第(i+1)/2个球,如果i为偶数,就向右节点下落,并且相对于右孩子而言,是其第i/2个节点。

#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;

int L;

int main(){
	cin >> L;
	int D, I;
	while (L){
	cin >> D >> I;
	if (D == -1) break;
	int number = 1;
	for (int i = 1; i < D; i++){
	if (I % 2 == 0){
	    number = number * 2 + 1;
	    I = I / 2;
	}
	else{
	   number = number * 2;
	   I = (I + 1) / 2;
	   }
	 }
	cout << number << endl;
	L--;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值