完全な二分木の重み(2019 Blue Bridge Cup Zhenti)

N個のノードを持つ完全な二分木が与えられた場合、ツリー内の各ノードの重みは、
上から下なります。

 

Xiaomingは、同じ深さのノードの重みを合計したいと考えています。ノードの重みの合計が最大の深さを知りたいですか?重みの合計が最大の深さが複数ある場合は、最小の深さを出力してください。 。

注:ルートの深さは1です。

入力の最初の行に
は整数Nが含まれています。2番目の行には、N個の整数A1、A2、...ANが含まれています。

output
答えを表す整数を出力します。

入力サンプル716 5 4 3
2
1

コンピュータの内部は次のようになります。

              1深さは1

   65合計=11深さは2です

4 3 2 1 sum=10深さは3

したがって、出力サンプルは2です。

データ範囲
すべての評価ケースで、1≤N≤100000、-100000≤Ai≤100000

アイデア
は、forループを使用して同じ深さの子葉入力を制御し、次のレイヤーは前のレイヤーの2倍になり、比較のために累積することです。さらに面倒なことをせずに、上記のコード:

#include<iostream>

using namespace std;

int shu(int n)
{
	int i, j, num;
	int ans = 0, treedepth = 0, sum = 0, leaf = 1, figure = 0;

	for (i = 1; i <= n; i++) 
	{
		if (i == 1) 
			leaf = 1;
		else 
			leaf *= 2;
		sum = 0;
		for (j = 1; j <= leaf; j++)
		{
			if (figure >= n) break;
			cin >> num;
			sum += num;
			figure++;
		}
		if (ans < sum)
		{
			ans = sum;
			treedepth = i;
		}
	}
	return treedepth;
}

int main() {
	int n,deep;

	cin >> n;
	deep = shu(n);
	cout << deep << endl;

	return 0;
}

4月9日のブルーブリッジカッププロビンシャルチャンピオンシップの成功をお祈りします。
 

おすすめ

転載: blog.csdn.net/qq_64263760/article/details/123964977
おすすめ