您的位置:首页 > 运维架构

例题6-6 UVs679 Dropping Balls(二叉树)

2016-02-04 16:16 288 查看
题意:

看白书

要点:

完全就是二叉树,直接用一个数组建树。但是直接模拟这样做会TLE,每次都要模拟前面所有的运动情况,每组测试程序下落总层数可能有2^19*19=9961472,又一共可能有10000组数据,超时是肯定的,所以有简便方法,根据奇偶来判断,直接模拟最后一个小球的路线

#include<stdio.h>
#include<string.h>

int main()
{
int D, I,t;
while (scanf("%d", &t)!=EOF&&t!=-1)
{
while (t--)
{
scanf("%d %d", &D, &I);
int k = 1;
for (int i = 0; i < D - 1; i++)
{
if (I % 2)         //奇数往左
{
k = 2 * k;
I = (I + 1) / 2;  //在左子树中是第几个到的,再次判断奇偶
}
else
{
k = 2 * k + 1;
I = I / 2;
}
}
printf("%d\n", k);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: