您的位置:首页 > 其它

noip2005初赛-木材加工

2015-08-23 16:56 295 查看
noip2005C_4_2木材加工



题目描述:

木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有

剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段越长越好,你的任务

是计算能够得到的小段木头的最大长度。木头长度的单位是cm。原木的长度都是正整数,

我们要求切割得到的小段木头的长度也是正整数。



输入:

第一行是两个正整数N和K(1≤N≤10000,1≤K≤10000),N是原木的数目,

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



输出:

输出能够切割得到的小段的最大长度。如果连1cm长的小段都切不出来,输出“0”。



输入样例:

3 7

232

124

456



输出样例:

114

var
n,k:integer;
len:array[1..10000] of integer;
i,left,right,mid:integer;

function isok(t:integer):boolean;
//判断每根木头切成长度为t的小段可不可行,可行返回true
var
num,i:integer;
begin
	num:=0;
	for i:=1 to n do
	begin
		if num>=k then break;
		num:=num+len[i] div t;
	end;
	if num>=k then isok:=true
	else isok:=false;
end;

begin
	assign(input,'noip2005C_4_2.txt');
	reset(input);
	readln(n,k);
	right:=0;
	for i:=1 to n do
	begin
		readln(len[i]);
		if right<len[i] then right:=len[i];
		//right保存所有木头中最长的长度
	end;
	inc(right);
	left:=0;
	while left+1<right do
	begin
		mid:=(left+right)div 2;
		if not isok(mid) then right:=mid
		else left:=mid;
	end;
	writeln(left);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: