POJ 1064 Cable master

把以前的一篇文章转成随笔

给你n根线,现在要把这n根线切割成k根等长(设长为len)的线,问能切得的最长的len为多少。

二分搜索。

别用G++;

#include <cstdio>
#include <iostream>
using namespace std;
int n;
int K;
double a[10005];
double maxn;
int main()
{
	scanf("%d %d",&n,&K);
	for(int i=1;i<=n;i++)
	{
		scanf("%lf",&a[i]);
		maxn=max(maxn,a[i]);
	}
	double l=0.0;
	double r=maxn;
	for(int i=1;i<=100;i++)
	{
		double mid=(l+r)/2;
		int ans=0;
		for(int j=1;j<=n;j++)
		{
			ans+=(int)(a[j]/mid);
		}
		if(ans>=K)
		{
			l=mid;
		}
		else
		{
			r=mid;
		}
	}
	printf("%.2lf",int(r*100)*0.01);
	return 0;
}

  

posted @ 2018-09-25 15:33  古城独钓  阅读(90)  评论(0编辑  收藏  举报