描述
木材厂堆着 n 根大木头,老板派一辆卡车将木头运走,卡车至少要装载 m 根才能发车。
现在使用机器将 n 根大木头切割成长度相等的小木头,当然希望小木头越长越好,这样才能少浪费木材。
请利用所学的知识,帮忙计算小木头的最大长度,交给切割师傅。
输入描述
第一行两个正整数 n 和 m,分别代表大木头的数量,卡车的装载量 m 根。
接下来 n 行,每行一个正整数 ai,表示每根大木头的长度。
输出描述
一个正整数,表示小木头的最大长度。如果切不出来,输出 0。
样例输入 1
4 7 18 6 11 7
样例输出 1
5
提示
数据范围与提示
对于 100% 的数据,有 1≤n≤105,1≤m≤108,1≤ai≤108。
代码:
#include <bits/stdc++.h>
using namespace std;
int n,k,a[100001],r,l,ans,mid;
double x;
bool c(int mid){long long s=0;for(int i=1;i<=n;i++){s+=a[i]/mid;}return s>=k;
}
int main(){cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];r=max(r,a[i]);}while(l<=r){mid=(l+r)/2;if(c(mid)){ans=mid;l=mid+1;}else{r=mid-1;}}cout<<ans;return 0;
}
以上内容均为原创;欢迎参考、借鉴!
但拒绝盗版;也禁止任何人在未经本人同意的条件下用于商业用途。
作者保留法律追究责任。