题解
2026-04-07 17:25:46
发布于:浙江
30阅读
0回复
0点赞
#include<iostream>
#include<algorithm>
using namespace std;
long long getWoodLen(long long n,long long h,long long tree[(int)(1e6)]){
long long out=0;
for(int i=0;i<n;i++){
if(tree[i]-h>0){
out+=tree[i]-h;
}
}
return out;
}
int main(){
long long n,m;
cin>>n>>m;
long long tree[n];
for(int i=0;i<n;i++){
cin>>tree[i];
}
sort(tree,tree+n);
long long max=tree[n-1],min=0,mid,ans=0;
while(min<=max){
mid=(max+min)/2;
if(getWoodLen(n,mid,tree)>=m){
min=mid+1;
ans=mid;
}else{
max=mid-1;
}
}
cout<<ans;
return 0;
}
不知道怎么全改成long long就过了
全部评论 1
看不懂的看这里
#include<bits/stdc++.h> using namespace std; long long getWoodLen(long long n,long long h,long long tree[(int)(1e6)]){ long long out=0; for(int i=0;i<n;i++){ if(tree[i]-h>0){ out+=tree[i]-h; } } return out; }//所有被砍的树 int main(){ long long n,m; cin>>n>>m; long long tree[n]; for(int i=0;i<n;i++){ cin>>tree[i]; } /*输入*/ sort(tree,tree+n);//排序 long long r=tree[n-1],l=0,mid,ans=0; while(l<=r){ mid=(l+r)/2; if(getWoodLen(n,mid,tree)>=m){ l=mid+1; ans=mid; }else{ r=mid-1; } } /*"二分正文"*/ cout<<ans; return 0; }2026-07-24 来自 广东
0





有帮助,赞一个