个人理解的最后l-1的原因,给搞不清楚的同学
查看原帖
个人理解的最后l-1的原因,给搞不清楚的同学
557887
acahv楼主2022/2/16 17:06
int find()
{
	int l = 0, r = a[N];
	while (l < r)
	{
		long long sum = 0;
		int mid = (l + r) / 2;
		for (int i = 1; i <= N; i++)
		{
			if (a[i] > mid)
			{
				sum += (a[i] - mid);//计算当前中值获得的木板长度
			}
		}
		if (sum >= M)//获得木板太多了/正好,说明最低位置太低,要把最低位置升高
		{
			l = mid + 1;
		}
		else if (sum < M)//获得木板太少,说明最低位置太高,要把位置调低
		{
			r = mid;
		}
	}
	return l - 1;//-1的原因:l不是最终答案,在求出最小sum后l依然+1,l-1才是答案
}
2022/2/16 17:06
加载中...