蓝桥杯 2019第十届蓝桥杯B组C++ 完全二叉树的权值
问题描述 给定一棵包含N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是A1, A2,…… AN,如下图所示: 现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。 注:根的深度是1。 输入格式 第一行包含一个整数N。 第二行包含N 个整数A1, A2, …… AN 。 输出格式 输出一个整数代表答案。 样例输入 1 2 7 1 6 5 4 3 2 1 样例输出 1 2 评测用例规模与约定 对于所有评测用例,1 <= N <= 100000,100000 <= Ai <=100000。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<string> #include<vector> #include<queue> #include<map> #include<set> using namespace std; #define INF 0x3f3f3f3f #define N 100005 int num[N]={0}; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&num[i]); int ans=1,k=0,max=-INF; for(int i=1;i<=ceil(log(n+1)/log(2));i++) { int sum=0; for(int j=0;j<pow(2,i-1);j++) sum+=num[k++]; if(sum>max) { max=sum; ans=i; } } printf("%d\n",ans); return 0; } 关注微信公众号,第一时间获取最新内容,让我们一起变得更强!Debug客栈:订阅本站· 文章归档· 我的项目· 友情链接· 我的使用· 飞湾计划· 摄影展集· 我的主页· 知盈官网
以上内容来自博客订阅源,版权归原作者。关注作者后可以在 关注列表 第一时间查看作者文章。
登录后,加入这场讨论。
登录参与