二分答案
2026-07-15 19:52:26
发布于:广东
小码酱砍树
#include<bits/stdc++.h>
using namespace std;
int a[1000010];
int n,m;
bool check(int h){
long long sum = 0;//总木材数量
for(int i=1;i<=n;i++){
if(a[i]>h)sum+=a[i]-h;
}
if(sum>=m)return true;
return false;
}
int main(){
cin>>n>>m;//要求木材数量
int mx = 0;
for(int i=1;i<=n;i++){
cin>>a[i];
mx = max(mx,a[i]);
}
int l = 0,r = mx,ans = mx;
//锯片高度在满足条件下 越大越好
while(l<=r){
int mid = (l+r)/2;
if(check(mid)){
l = mid + 1;
ans = mid;
}else{
r = mid - 1;
}
}
cout<<ans;
return 0;
}
蛋糕


梯形摆放


城市
//1. check 函数
//2. l ,r 上限下限
//3. while循环
//4. 判断check
//5. l,r移动
#include<bits/stdc++.h>
using namespace std;
int a[100010];
int n,m;
bool check(int x){
long long sum = 0;
for(int i=1;i<=n;i++)sum += (a[i] + x - 1) / x; // 向上取整 ceil
if(sum<=m)return true;
return false;
}
int main(){
while(true){
cin>>n>>m;
if(n==-1 && m==-1)return 0;
for(int i=1;i<=n;i++)cin>>a[i];
int l = 1, r = 5e6,ans = 0;
while(l<=r){
int mid = (l+r)/2;
if(check(mid)){
r = mid - 1;
ans = mid;
}else {
l = mid + 1;
}
}
cout<<ans<<endl;
}
}
全部评论 28
11111111111111111111111111111111111111111111111111111111111
2026-07-15 来自 广东
1我张云景跪了·快点赞刷评论
2026-07-15 来自 广东
1快点赞,不然我张云景不客气
2026-07-15 来自 广东
1站点掉,傲世间,有我老师便有天
2026-07-15 来自 广东
1老师无敌
2026-07-15 来自 广东
1老师牛逼
2026-07-15 来自 广东
11836487265872648756749265987346875364565
2026-07-15 来自 广东
1快跟我刷榜一
2026-07-15 来自 广东
11
2026-07-15 来自 浙江
01
2026-07-15 来自 浙江
01
2026-07-15 来自 浙江
01
2026-07-15 来自 浙江
0
2026-07-15 来自 广东
01
2026-07-15 来自 广东
0111111111111111111111111111111111111111111111111111111111111
2026-07-15 来自 广东
01
2026-07-15 来自 广东
01
2026-07-15 来自 广东
011
2026-07-15 来自 广东
01
2026-07-15 来自 广东
01
2026-07-15 来自 广东
0

























有帮助,赞一个