top1编程
← 返回题目
题解

【基础】伐木工

1 条题解

  • 0
    @ 2026-7-28 22:10:02
    #include<bits/stdc++.h>
    using namespace std;
    long long n,m,a[1000100],ma;
    //check函数 
    long long check(long long x){
    	long long ans = 0;
    	for(int i = 1;i <= n;i++){
    		if(a[i] > x){//超出部分,砍掉
    			ans = ans + (a[i] - x);
    		}
    	}
    	return ans;//砍伐总数
    }
    int main(){
    	cin>>n>>m;
    	for(int i = 1;i <= n;i++){
    		cin>>a[i]; 
    		ma = max(a[i],ma);//求最大 
    	}
    	long long l=0,r=ma;//砍树的范围 
    	long long mid;
    	while(l <= r){
    		mid = l+(r-l) /2;//预设高度
    		if(check(mid) < m) {//砍伐数量不够
                r = mid-1;//长度减小
            }
    		else {
                l = mid + 1;//长度增加
            }
    	}
    	cout<<r;
    }
    
    • 1