首页 > 其他 > 详细

UVA 679 Dropping Balls

时间:2019-02-21 16:57:26      阅读:180      评论:0      收藏:0      [点我收藏+]

思路:

技术分享图片

因为小球落下后,开关的状态就会改变,所以一个节点上的小球的去向,跟这个小球是第几个到达此节点

有关系,也就是说,如果到达时是第奇数个,往左走,偶数个,就要往右走;

比如,如果是节点1,那么我们可以知道,第一个小球(I=1)肯定是往左走,第二个小球(I=2)则是往右走;

也就是球到达的编号为奇数,则往左走,偶数往右走;

那么如果是节点2呢,如果把节点2看成节点1,其实也有规律;

比如第5颗球,他是第五个到达节点1的球,接下来往左,第5/2+1=3(奇)个到达节点2的球,

接下来往左,3/2+1=2(偶),第2个到达节点4,下面第2/2=1个到达节点9;

说来说去就是,球到达每个节点的编号决定了它下一步的方向,于是,我们只需要模拟最后一颗球,

就可以得到结果。

还要注意,二叉树的结构是

技术分享图片

 

所以节点编号计算是往左k*2,往右k*2+1。

 

 1 #include<cstdio>
 2 int main() {
 3     int T, D, I;
 4     scanf("%d", &T);
 5     while (T--)
 6     {
 7         scanf("%d%d", &D, &I);
 8         int k = 1;//k是当前节点的编号
 9         for (int i = 0; i < D - 1; i++)
10         {
11             if (I % 2) //奇数,是往左走的,第(I + 1) / 2个小球
12             { 
13                 k = k * 2;
14                 I = (I + 1) / 2; 
15             }
16             else //偶数,往右,第I/2个
17             { 
18                 k = k * 2 + 1;
19                 I /= 2; 
20             }
21         }
22             printf("%d\n", k);
23     }
24     return 0;
25 }

 

UVA 679 Dropping Balls

原文:https://www.cnblogs.com/fudanxi/p/10413615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!