2655|2655 切木头(二分)
有n个木棍,长度不等,现在要将他们切成同等长度的木棍m个,并且每段的长度都为整数。问这m根木棍最长能有多长?
如果分不出来,输出0。
输入
第一行2个数:n, m中间用空格分隔(1 <= n <= 100000, 1 <= m <= 10^9)
后面n行:每行1个数,对应木棍的长度(1 <= Li <= 10^9)。
输出
输出一个整数,对应木棍的长度。
输入样例
【2655|2655 切木头(二分)】3 10
15
25
12
输出样例
5
#include
using namespace std;
int n,m;
int a[100010],l,r=0,mid,maxn=0;
int find(int x)
{
if(x==0) return false;
int sum=0;
for(int i=1;
i<=n;
i++)
sum+=a[i]/x;
if(sum>=m)
return true;
return false;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;
i<=n;
i++)
{
cin>>a[i];
r=max(r,a[i]);
}
l=1;
//
while(l<=r)
{
mid=(l+r)/2;
if(find(mid))
{
maxn=max(maxn,mid);
l=mid+1;
}
else
r=mid-1;
}
cout<
推荐阅读
- 如何寻找情感问答App的分析切入点
- 把一切献给现在
- 识得平常心,一切处都是道——虚云大师
- 再见,不见
- 今日自我介绍,感恩所遇一切
- 末日追逐
- 归期未定,想家心切
- 242为什么不断切换任务会更容易累()
- 一切顺利、一路平安
- 凡你所关注的一切都会来到你