作业介绍

#include<bits/stdc++.h>
using namespace std;
int main(){
	
	int n,m,x=0;         // n:数量   m:要得到的米数    
	int arr[10001];      // arr:存放每棵树的高度  
	
	cin >> n >> m;
	for(int i=1; i<=n; i++){
		cin >> arr[i];
		x = max(x,arr[i]);
	} 
	
	int left=0, right=x, mid;
	
	while(right-left>1){
		mid = (left+right)/2;   // mid:锯片的高度   
		// 用mid这个高度的锯片去砍树   
		int sum=0;     //砍掉的木材之和  
		for(int i=1; i<=n; i++){
			if(arr[i]>mid){    // 树木高于锯片   
				sum += (arr[i]-mid);
			}
		} 
		
		if(sum>=m){     // 如果砍下来的足够   
			left = mid;    // 有可能mid就是最合适的,不能+1,	
		}
		else{           // 砍下来的不够   
			right = mid;    // 高度下调   
		} 		
	}

	cout << left;
	
	
	
	return 0;
}


状态
已结束
题目
5
开始时间
2024-11-17 0:00
截止时间
2024-11-25 23:59
可延期
24 小时