切木材(二分法)

简介: 切木材(二分法)

题目背景



要保护环境


题目描述



木材厂有 nn 根原木,现在想把这些木头切割成 kk 段长度均为 ll 的小段木头(木头有可能有剩余)。


当然,我们希望得到的小段木头越长越好,请求出 ll 的最大值。


木头长度的单位是 \text{cm}cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。


例如有两根原木长度分别为 1111 和 2121,要求切割成等长的 66 段,很明显能切割出来的小段木头长度最长为 55。


输入格式



第一行是两个正整数 n,kn,k,分别表示原木的数量,需要得到的小段的数量。

接下来 nn 行,每行一个正整数 L_iLi,表示一根原木的长度。


输出格式



仅一行,即 ll 的最大值。

如果连  1cm 长的小段都切不出来,输出 0


输入输出样例



输入 #1复制

3 7

232

124

456


输出 #1复制

114

说明/提示



数据规模与约定


对于 100\%100% 的数据,有 1\le n\le 10^51≤n≤105,1\le k\le 10^81≤k≤108,1\le L_i\le 10^8(i\in[1,n])1≤Li≤108(i∈[1,n])。

#include<iostream>
using namespace std;
int mid;
int main()
{
  int m,n;
  cin>>m>>n;
  int a[100000];
  for(int i=1;i<=m;i++)
  {
    cin>>a[i];
  }
  int l=0,r=1e8+1;
  while(l+1<r)//当l=r-1的时候退出循环 
  {
  int ans=0;
  mid=(l+r)/2;
  for(int i=1;i<=m;i++)
  ans+=a[i]/mid;
  if(ans>=n)
  l=mid;
  else
  r=mid;
  }
  cout<<l; 
}


相关文章
|
8月前
|
算法
【算法专题突破】二分查找 - 704. 二分查找(16)
【算法专题突破】二分查找 - 704. 二分查找(16)
17 0
|
19天前
|
存储 算法 Java
【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?
【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?
|
19天前
|
算法 大数据
二分查找和二分答案
二分查找和二分答案
23 1
|
19天前
|
算法 索引
二分查找与二分答案
二分查找与二分答案
|
19天前
|
算法 索引
算法思想总结:二分查找算法
算法思想总结:二分查找算法
|
19天前
|
算法 测试技术 API
深入理解二分查找算法(一)
深入理解二分查找算法(一)
|
19天前
|
算法 Java C语言
二分法的应用
二分法的应用
|
19天前
|
算法 NoSQL 容器
二分查找 三分查找与二分答案
二分查找 三分查找与二分答案
|
19天前
|
存储 算法 C#
C# | 二分查找算法的实现
二分查找法一种在**有序数组**中查找目标值的算法。划重点——“**有序**”,与需要遍历整个数组的查询算法不同,二分查找法通过将数组分成两部分来快速定位目标值所在的位置。 它的主要好处在于它的效率很高。因为它能够通过每次排除一半的元素来快速缩小搜索范围,因此在大型数据集上使用二分查找法可以显著提高查找速度。
21 0
|
7月前
|
算法
二分法以及三分法的使用
二分法以及三分法的使用
59 0