• P4715 【深基16.例1】淘汰赛


    题目链接https://www.luogu.com.cn/problem/P4715

    根据满二叉树的性质:

    1.满二叉树外观上是一个三角形
    2.一个层数为k 的满二叉树总结点数为:2^k-1   (因此满二叉树的结点树一定是奇数个)
    3.第i层上的结点数为:2^(k-1)
    4.一个层数为k的满二叉树的叶子结点个数(也就是最后一层):
    5.用一维数组存放满二叉树(如上图),除根节点外(设节点下标为h),该节点的父亲节点下标为h/2,左儿子节点下标为2*h,右儿子节点下标为2*h+1

    理解上述原理后,可写出下面题解

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n, a[1<<9];                      //a数组用于存储数据 
     4 int main()
     5 {
     6     cin>>n;
     7     //根据满二叉树的性质,满二叉树叶子节点起始节点到最后节点下标为 2^n ~ 2^(n+1)-1 
     8     int s=1<<n;                     //满二叉树的叶子节点的起始下标 
     9     n=n+1;
    10     int e=(1<<n)-1;                //满二叉树的叶子节点的最后下标
    11     for(int i=s, j=1; i<=e; i++)   //输入叶子节点的数值 
    12             cin>>a[i];
    13         
    14     for(int i=e; i>=1; i=i-2)     //叶子节点序号从大到小,构建满二叉树的逻辑结构 
    15         a[i/2]=max(a[i],a[i-1]);
    16     
    17     int yj=min(a[2],a[3]);        //银奖从2,3节点中获取最小值 
    18     
    19     for(int i=s; i<=e; i++)       //从数组中找到银奖的输入序号 
    20     {
    21         if(yj==a[i]){
    22             cout<<i-s+1;
    23             break;
    24         }
    25     }
    26     return 0;
    27 }
  • 相关阅读:
    C# 接口
    C# 多态
    C# 继承
    C# 封装
    动态规划:从新手到专家
    hduoj题目分类
    4.2 最邻近规则分类(K-Nearest Neighbor)KNN算法应用
    警惕自增的陷阱(++)
    五大常用算法之四:回溯法
    算法java实现--回溯法--图的m着色问题
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/13492989.html
Copyright © 2020-2023  润新知