上一题题解
2023-08-14 18:50:36
发布于:广东
2阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000005],height;
int Binary_answer(int h){
int left=0,right=h,mid,ans;
while(left<=right){ //二分框架
mid=(left+right)/2;
long long sum=0; //累加会超过int范围
//计算高度为mid时,能锯的木材总量
for(int i=1;i<=n;i++){
if(a[i]>mid) sum+=a[i]-mid;
}
//判断是否达到要求的木材总量m,更新区间
if(sum>=m) ans=mid,left=mid+1;
else right=mid-1;
}
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]>height) height=a[i];
}
cout<<Binary_answer(height);
return 0;
}
这里空空如也
有帮助,赞一个