题解
【基础】伐木工
1 条题解
-
0
#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