uva679 dropping balls

来源:互联网 发布:sql 商业智能 编辑:程序博客网 时间:2024/05/22 03:49
#include<cstdio>#include<cstring>const int maxd = 20;int s[1<<maxd];int main(){    int D, I, N;    scanf("%d", &N);    while(N--) {        scanf("%d", &D);        if(D == -1) break;        scanf("%d", &I);        int k =1;        for(int i =0 ;i < D-1; i++)        if(I%2) { k = k*2; I = (I+1)/2; }//这两部还不是太懂,回来再看        else { k = k*2 + 1; I /= 2; }        printf("%d\n", k);    }    return 0;}/**用数组的运算量太大,每个小球都会落在根节点上,因此前两个小球必然一个左子树,一个右子树,只需看小球的编号,就知道他最终落在那颗子树中,对于那些知道该小球是第几个落早根的左子树里的,就可以知道它下一步往左还是往右,如果使用题目中给出的编号I,它是往左走的第(I+1)/2个小球,当I是偶数时,它是往右走的第I/2个小球,这样可以直接模拟最后一个小球的路线。*/

0 0
原创粉丝点击