试题 历届真题 完全二叉树的权值【第十届】【省赛】【A组】

简介: 试题 历届真题 完全二叉树的权值【第十届】【省赛】【A组】

资源限制


内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s


问题描述


 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从

 上到下、从左到右的顺序依次是 A1, A2, · · · AN,如下图所示:


ec75bd5e6abe467b86cbfecc64f8d278.png



现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点

 权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。

 注:根的深度是 1。


输入格式


 第一行包含一个整数 N。

 第二行包含 N 个整数 A1,

 A2, · · · AN 。


输出格式


 输出一个整数代表答案。


样例输入


7

1 6 5 4 3 2 1


样例输出


2


评测用例规模与约定


 对于所有评测用例,1 ≤ N

 ≤ 100000,−100000 ≤ Ai ≤ 100000。

#include <iostream>
using namespace std;
const int N = 1000000;
static int A[N];
static int sum[N] = { 0 };
static int Tree[1000][100000] = { 0 };
int main() {
  long long n;
  int t = 0;
  long long k = 1;
  int i;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> A[i];
  }
  for (i = 0; t < n ; i++) {
    for (int j = 0; j < k; j++) {
      Tree[i][j] = A[t++];
    }
    k *= 2;//更新层数
  }
  k = 1;
  int maxi = 0, mini = 0;
  for (int l = 0; l < i; l++) {
    for (int j = 0; j < k; j++) {
      sum[l] += Tree[l][j];
    }
    if (sum[maxi] < sum[l]) {
      maxi = l;
    }
    if (sum[mini] > sum[l]) {
      mini = l;
    }
    k *= 2;
  }
  int num = 0;
  for (int l = 0; l < i; l++) {
    if (sum[l] == sum[maxi]) {
      num++;
    }
  }
  if (num < 2) {
    cout << maxi + 1;
  }
  else cout << mini + 1;
  return 0;
}

88f436f755e3440eabe17d319a9f47b5.png









相关文章
|
9月前
砍竹子(蓝桥杯 2022 省赛 B 组 J 题)
砍竹子(蓝桥杯 2022 省赛 B 组 J 题)
60 0
|
11月前
|
算法 测试技术
蓝桥杯2022年第十三届决赛真题-卡牌——二分法
蓝桥杯2022年第十三届决赛真题-卡牌——二分法
88 0
|
11月前
|
测试技术
蓝桥杯2021年第十二届省赛真题-砝码称重(动态规划)
蓝桥杯2021年第十二届省赛真题-砝码称重(动态规划)
|
11月前
题目 2664: 蓝桥杯2022年第十三届省赛真题-求和
题目 2664: 蓝桥杯2022年第十三届省赛真题-求和
|
算法
算法竞赛题解:校门外的树
NOIP2005 普及组:校门外的树
204 0
|
算法 C++
蓝桥杯——2020第十一届C/C++真题[省赛][B组]
蓝桥杯——2020第十一届C/C++真题[省赛][B组]
蓝桥杯——2020第十一届C/C++真题[省赛][B组]
|
移动开发 算法 编译器
蓝桥杯——2015第六届C/C++真题[省赛][B组]
蓝桥杯——2015第六届C/C++真题[省赛][B组]
蓝桥杯——2015第六届C/C++真题[省赛][B组]
试题历届真题乘积尾零【第九届】【省赛】【B组】(C++)
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如下的 1010 行数据,每行有 1010 个整数,请你求出它们的乘积的末尾有多少个零?
106 0