Luogu P2440 题解
原创
©著作权归作者所有:来自51CTO博客作者PanDaoxi的原创作品,请联系作者获取转载授权,否则将追究法律责任
木材加工
题目背景
要保护环境
题目描述
木材厂有
根原木,现在想把这些木头切割成
段长度均为 
当然,我们希望得到的小段木头越长越好,请求出 
木头长度的单位是
,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。
例如有两根原木长度分别为
和
,要求切割成等长的
段,很明显能切割出来的小段木头长度最长为
。
输入格式
第一行是两个正整数
,分别表示原木的数量,需要得到的小段的数量。
接下来
行,每行一个正整数
,表示一根原木的长度。
输出格式
仅一行,即 
如果连
长的小段都切不出来,输出 0
。
样例 #1
样例输入 #1
样例输出 #1
提示
数据规模与约定
对于
的数据,有
,
,
。
// Author: PanDaoxi
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int INF = 1e5 + 1;
int n, k, l, r, mid, a[INF];
bool check(int t){
/*
我们要求出每根棍按t截出来的数量
然后和k作比较
如果q >= k ===> true
否则 ===> false
*/
int q = 0;
for(int i=1; i<=n; i++){
q += a[i] / t;
}
return q >= k;
}
signed main(){
ios :: sync_with_stdio(false);
cin >> n >> k;
l = 0, r = INT_MIN;
for(int i=1; i<=n; i++){
cin >> a[i];
r = max(r, a[i]);
}
while(l <= r){
mid = (l+r) / 2;
if(mid != 0){
if(check(mid)){
l = mid + 1;
}
else{
r = mid - 1;
}
}
else{
cout << 0;
return 0;
}
}
cout << r;
return 0;
}
P2440题解