题解分享
题解分享简介
完全二叉树的权值(编程题) - 题解
被气晕了, 忘记特殊情况交了12次才通过
```
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.PrintWriter;
import java.util.Scanner;
public class Main {
static int n;
static int a[];
public static void main(String[] args) {
Scanner scanner = new Scanner(new BufferedInputStream(System.in));
PrintWriter writer = new PrintWriter(new BufferedOutputStream(System.out));
n = scanner.nextInt();
a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
double end = Math.log(n + 1) / Math.log(2);
int res = 1;
long maxCount = 0x3f3f3f;
maxCount = -maxCount;
int index = 0;
for (int dep = 1; dep <= end; dep++) {
long sum = 0;
for (int i = 1; i <= Math.pow(2, dep - 1); i++) {
sum += a[index++];
}
if (sum > maxCount) {
res = dep;
maxCount = sum;
}
}
//特别情况,剩余的节点单独记录
long sum = 0;
while (index < n) {
sum += a[index++];
}
if (sum > maxCount) {
res = (int)end+1;
maxCount = sum;
}
System.out.println(res);
writer.flush();
scanner.close();
}
}
```
查看全文
0
0
0
2
完全二叉树的权值(编程题) - 题解
简单的模拟
```
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100005];
long long cs,cnt,tol,ans=-100005,ansc,css,unt;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
cs=1;css=1;
for(int i=1;i<=n;i++)
{
if(cnt==cs)
{
if(tol>ans)
{
ans=tol;
ansc=css;
}
cs<<=1;
css++;
cnt=0;
tol=0;
}
cnt++;
tol+=a[i];
}
if(tol>ans)
{
ans=tol;
ansc=css;
}
cout<<ansc;
}
```
查看全文
0
0
0
1



