切木材(二分法)

简介: 切木材(二分法)

题目背景



要保护环境


题目描述



木材厂有 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; 
}


相关文章
|
7月前
|
算法 大数据
二分查找和二分答案
二分查找和二分答案
64 1
|
7月前
|
算法 索引
二分查找与二分答案
二分查找与二分答案
|
7月前
|
算法 Java C语言
二分法的应用
二分法的应用
|
7月前
|
算法 NoSQL 容器
二分查找 三分查找与二分答案
二分查找 三分查找与二分答案
|
7月前
|
存储 算法
03 折半查找
  折半查找又称为二分查找。它仅适用于有序的顺序表。   折半查找的基本思想:首先给定值 key 与表中中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分(例如,在查找表升序排列时,若给定值 key 大于中间元素,则所查找的元素只可能在后半部分)。然后在缩小的范围内继续进行同样的查找,如此重复,知道找到位置,或确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。  
48 0
|
算法
二分法以及三分法的使用
二分法以及三分法的使用
159 0
二分法查找(折半查找)
二分法查找(折半查找)
80 0
|
机器学习/深度学习 存储 人工智能
“二分“==“二分查找“ ?“yes“:“no“;
“二分“==“二分查找“ ?“yes“:“no“;
128 0
|
算法
算法提升(一)二分法
算法提升(一)二分法
99 0
算法提升(一)二分法