绳子切割+二分查找

题目描述

有n条绳子,它们的长度为Li(Li<=1000).如果从它们中切割出K条长度相同的绳子的话,这条绳子每条最长能有多长?答案保留到小数点后2位。

输入

输入包含两行,第一行有两个整数n和k,n代表n条绳子,k代表切割出的长度。
4 11
8 .02 7.43 4.57 5.39

输出

输出能切割出最长的长度maxl。

思路

这个题是二分查找典型的例子,二分枚举0到绳子的最大极限,当满足条件增大maxl的枚举长度,否则就减小l的maxl。

代码

#include<stdio.h>
const int  MAXN=1005;
double arr[MAXN];
int n,k;
bool cheak(double L)
{
	int sum=0;
	for(int i=0;i<n;i++)
	{
		int x=arr[i]/L;
		sum+=x;
	}
	if(sum>=k)	return true;
	else	return false;
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++)	scanf("%lf",&arr[i]);
	double l=0,r=MAXN;
	while(r-l>0.001)
	{
		double mid=(r+l)/2;
		if(cheak(mid))	l=mid;
		else	r=mid;
	}
	printf("%0.2f",l);
	return 0;
}
/*
4 11
8.02 7.43 4.57 5.39
*/
发布了67 篇原创文章 · 获赞 1 · 访问量 1316

猜你喜欢

转载自blog.csdn.net/qq_45249273/article/details/104778631