前两个点不过!!!
查看原帖
前两个点不过!!!
1316711
huashuo楼主2024/4/9 13:00

为什么为什么为什么呢

#include<iostream>
#include<cmath>
using namespace std;
int tre[130005]; //树的每个结点 
long long sums = 0; //当前深度的权值和 
int main()
{
	int N; //总的结点个数 
	int base = 0; //上一深度的结点个数 
	int height = 1; //起码根的深度为 1 
	long long anssum = -11111111111; //定义历史最大值 
	int ans;//输出最大权值的深度 
	int nowmax = base + pow(2,height -1); // 当前深度的最大结点数 
	
	scanf("%d", &N);
	
	for(int i = 0; i < N; i++)
	cin >> tre[i];
	
	for(int i = 0; i < N; i++)
	{
		sums += tre[i];
		if(i == nowmax || i==(N-1))
		//遍历到当前深度的最后一个结点了 或者 最大深度的最后一个结点了 
		{
			base = i; //更新当前深度结点数为下一深度的基础 
			if(sums > anssum) //如果当前深度的权值和大于历史最大值 
			{
				ans = height; //更新答案 
				anssum = sums; // 更新历史最大值 
			}
			sums = 0; //为下一深度做准备 
			height += 1; //深度加一 
			nowmax = base + pow(2, height - 1);//更新最大结点数 
		}
	}
	cout << ans;
}
2024/4/9 13:00
加载中...