Openjudge NOI题库 ch0111/t1776 木材加工

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

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

第一行是两个正整数NK(1 ≤ N ≤ 10000, 1 ≤ K ≤ 10000),N是原木的数目,K是需要得到的小段的数目。
接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。
 

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

这题和ch0111/04是一样的做法,在这里就详细介绍了。

Ps 把n、k输入注释掉可以得1分!

 

 1 #include <stdio.h>
 2 int len[10010]={0};
 3 int main()
 4 {
 5     int i;
 6     int max=-1;
 7     int n,k,ans,mid;
 8     int r,l;
 9     scanf("%d%d",&n,&k);
10     for(i=0;i<n;i++)
11     {
12         scanf("%d",&len[i]);
13         if(len[i]>max) max=len[i];
14     }
15     l=0;
16     r=max+1;
17     while(l+1<r)//二分寻找合适的长度 
18     {
19         ans=0;
20         mid=(l+r)/2;
21         for(i=0;i<n;i++)
22             ans+=len[i]/mid;
23         if(ans>=k) l=mid;//注意这里条件控制就行了
24         else  r=mid;
25     }
26     printf("%d",l);
27     return 0;
28 }

 

posted on 2015-11-27 20:00  Ricochet!  阅读(505)  评论(0编辑  收藏  举报