UVa Dropping Balls

题目链接:

https://cn.vjudge.net/problem/UVA-679

 1 /*
 2 问题
 3 输入完全二叉树的层数D和有几个小球滚落,计算最后一个小球落入的叶子结点的小号。
 4 
 5 解题思路
 6 直接模拟超时,所以想想其他的办法。看看能不能直接计算最后一个小球的路线,可以知道前两个球必然是一个落入左子树,
 7 一个落入右子树,那么对于给出的第I个编号的小球,如果I是奇数,它就是往左走的第(I+1)/2个小球,当I是偶数的时候,
 8 它就是往右走的第I/2个小球。 
 9 */ 
10 #include<cstdio>
11 int main()
12 {
13     //freopen("E:\\testin.txt","r",stdin);
14     int t,D,I;
15     while(scanf("%d",&t) == 1 && t != -1){
16         while(t--){
17             scanf("%d%d",&D,&I);
18             int k=1;
19             for(int i=0;i<D-1;i++){
20                 if(I&1){
21                     k =k * 2;
22                     I=(I+1)/2;
23                 }
24                 else{
25                     k = k*2+1;
26                     I = I / 2;
27                 } 
28             }
29             printf("%d\n",k);
30         }
31     }
32     return 0;
33 }

 

转载于:https://www.cnblogs.com/wenzhixin/p/9129746.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值