一、题目内容
POJ 1064 原题地址
二、题意解释
给出n条线段,以米的单位给出,小数点后两位(精确到厘米),
要你对这些线段裁剪,裁剪出m条等长的线段,
并且让这些线段尽可能长另外线段的长度不能小于1厘米,如果筹不够m条,输出0.00
三、代码及注释
#include<cstdio>
#include<cmath>
using namespace std;
const double INF=200005.0;
double L[10001];
int n,k;
bool judge(double x)
{
double num=0;
for(int i=0; i<n; i++)
{
num+=(int)(L[i]/x);
}
return num>=k;
}
void solve()
{
double lb=0,ub=INF;
double mid;
for(int i=0; i<100; i++)
{
mid=(ub+lb)/2;
if(judge(mid)) lb=mid;
else ub=mid;
}
printf("%.2f\n",floor(ub*100)/100);
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=0; i<n; i++)
{
scanf("%lf",&L[i]);
}
solve();
return 0;
}