题解——二分答案
2025-07-22 13:49:02
发布于:北京
14阅读
0回复
0点赞
我们可以二分查找所有可能的高度,然后定义一个check函数检查当前尝试的高度是否能满足木头需求,如果满足就再调高点,不满足就调低点。由于二分的效率是log级别的,所以不会超时
#include<bits/stdc++.h>
using namespace std;
long long m,n,ans=-1,a[1000010];
bool check(long long x){
long long sum=0;
for(int i=1;i<=n;i++){
if(a[i]>x)sum+=a[i]-x;
}
return sum>=m;
}
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++){
cin>>a[i];
}
long long l=1,r=100000000000010,mid=0;
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
ans=mid;
l=mid+1;
}
else{
r=mid-1;
}
}
cout<<ans;
return 0;
}
这里空空如也
有帮助,赞一个