您的位置:首页 > 编程语言 > C语言/C++

2019蓝桥杯c/c++b组--G

2019-03-24 15:16 148 查看

完全二叉树 从一开始分1 2 4 8 … 2^t 份 找各分和的最大值就行了
注意初始化ans和ansl(ansl其实不用)

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int arr[100005];
long long add[50];
long long ans=-1000000000;
long long ansl=0;

int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
int nn=n;
int t=1,ee=1;
while(nn>0){
nn-=ee;
t++;
ee*=2;
}
t--;
//printf("%d",t);
int tttt=1;
int in=0;
for(int i=0;i<t;i++){
for(int j=0;j<tttt;j++){
add[i]+=arr[in++];
}
if(add[i]>ans){
ans=add[i];
ansl=i;
}
tttt*=2;
}
printf("%d",ansl+1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: