您的位置:首页 > 运维架构

openjudge 木材加工

2015-12-04 20:27 369 查看

t1776:木材加工

查看
提交
统计
提问

总时间限制: 1000ms 内存限制: 65536kB

描述木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目是给定了。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。

木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是正整数。

输入

第一行是两个正整数N和K(1 ≤ N ≤ 10000, 1 ≤ K ≤ 10000),N是原木的数目,K是需要得到的小段的数目。

接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。

 

输出输出能够切割得到的小段的最大长度。如果连1厘米长的小段都切不出来,输出"0"。
样例输入
3 7
232
124
456


样例输出
114


来源NOIP 2004#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int head,tail,mid,n,k,ans,maxn;

int len[10001];

bool pd(int x)

{

int num=0;

for (int i=1;i<=n;i++)

num+=len[i]/mid;

if (num<k)

return false;

else

return true;

}

int main()

{

scanf("%d%d",&n,&k);

maxn=0;

for (int i=1;i<=n;i++)

{

scanf("%d",&len[i]);

if (len[i]>maxn)

maxn=len[i];

}

head=1;

tail=maxn;

while (head<=tail)

{

mid=(head+tail)/2;

if (pd(mid))

{

head=mid+1;

if (mid>ans)

ans=mid;

}

else

tail=mid-1;

}

cout<<ans;

}//二分答案的思想
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: