zoukankan      html  css  js  c++  java
  • UVa 679. Dropping Balls

    这个题是啥考点长的又不像大暴力

    提交地址 VJudge

    题目大意

    有一棵深度为(D)的完美二叉树(假设根的深度为(1))。显然这棵树有(2^{D-1})个叶结点。现在有(2^{D-1})个小球依次从根结点向下滚。开始,所有结点的flag=false
    将一个小球放在根结点,小球开始下落。当小球未落入任一叶结点时,若小球所在的结点的flag=false则往左儿子下落;flag=true则往右儿子下落。当小球落到任一叶结点时,下落结束,小球经过的所有结点的flag都要取反。如果还有球,就以同样规则放球(放了前面那些球后flag不会重置)。
    求第(I)个下落的小球落在哪个叶结点。

    分析

    手玩一遍发现,对于题目描述中四层的完美二叉树,(2^{4-1}=8)个小球会依次落到(8,)(12,)(10,)(14,)(9,)(13,)(11,)(15)号结点,分别是第(0,)(4,)(2,)(6,)(1,)(5,)(3,)(7)个叶子结点,写成二进制再翻转一下……

    叶结点顺序 0 4 2 6 1 5 3 7
    二进制 000 100 010 110 001 101 110 111
    翻转 000 001 010 011 100 101 110 111
    十进制 0 1 2 3 4 5 6 7
    因此对于每组输入的$I$,其对应的叶结点编号即为:将$I-1$的二进制翻转后$+2^{D-1}$。 ##程序 ```cpp #include int main() { int T; scanf("%d", &T); while (T--) { int D, I; scanf("%d%d", &D, &I); I--; int rev = 0; for (int i = 1; i < D; i++) { rev = (rev << 1) + (I & 1); I >>= 1; } printf("%d ", rev + (1 << (D - 1)) ); } return 0; } ```
  • 相关阅读:
    Storm 中drpc调用
    yarn下资源配置
    java 中 Stringbuff append源代码浅析
    总结的MR中连接操作
    hive中使用rcfile
    MapFile
    HDFS副本存放读取
    zoj 1967 Fiber Network/poj 2570
    zoj 2027 Travelling Fee
    poj 1742 Coins
  • 原文地址:https://www.cnblogs.com/P6174/p/7857960.html
Copyright © 2011-2022 走看看