zoukankan      html  css  js  c++  java
  • 树-二叉树的编号

    样例输入:

    4 2

    3 4

    10 1

    2 2

    8 128

    16 12345

    样例输出:12

    7

    512

    3

    255

    36358

     1 //纯粹模拟算法 
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 const int maxn = 20;
     7 int s[1<<maxn];                           //最大结点个数为2^maxn - 1 
     8 
     9 int main()
    10 {
    11     int D, I;
    12     while(scanf("%d%d", &D, &I)==2)
    13     {
    14         memset(s, 0, sizeof(s));           //开关状态 
    15         int k, n = (1<<D) - 1;              //n是最大结点编号 
    16         for(int i = 0; i<I; i++)          //连续让I个小球下落。 
    17         {
    18              k = 1;
    19              for(;;)
    20              {
    21                  s[k] = !s[k];
    22                  k = s[k] ? k*2 : k*2 +1;   // 根据开关状态选择下落方向。 
    23                  if(k>n) break;             //已经出界 
    24              }
    25         }
    26         printf("%d
    ", k/2);                
    27     }
    28     return 0;
    29 }
    30  
    View Code

     优化算法

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int D, I;
     7     while(scanf("%d%d", &D, &I)==2)
     8     {
     9         int k = 1;
    10         for(int i=0; i<D-1; i++)
    11         if(I%2) 
    12         {
    13             k=k*2; I = (I+1)/2;
    14         }
    15         else
    16         {
    17             k=k*2+1; I/=2;
    18         }
    19         printf("%d
    ", k);
    20     }
    21     return 0;
    22 }
    View Code
  • 相关阅读:
    EM算法
    最大熵模型中的对数似然函数的解释
    PySpark 自定义函数 UDF
    PySpark 自定义聚合函数 UDAF
    Numpy总结
    Examples
    Examples
    Examples
    Examples
    Examples
  • 原文地址:https://www.cnblogs.com/acm1314/p/4516955.html
Copyright © 2011-2022 走看看