1、简单描述
k根网线,长度已知,切成m段,网线最长切多长?
2、思路
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <cmath>
using namespace std;
double l[10005];
int n,k;
const double eps = 1e-8;
bool judge(double x)
{
int num=0;
for(int i=0;i<n;i++)
{
num+=(int)(l[i]/x);
}
return num>=k;
}
int main()
{
while(scanf("%d%d", &n, &k) != EOF)
{
int sum = 0;
for(int i = 0; i < n; i++)
{
scanf("%lf", &l[i]);
sum += l[i];
}
double l = 0.0, r = 100001.0;
while(eps<fabs(r-l))
{
double mid=(l+r)/2;
if(judge(mid))
l=mid;
else
r=mid;
}
printf("%.2lf\n",floor(r*100)/100);
}
return 0;
}
思路很简单,查找上下限,二分查找。但是这个double型数据的处理很有问题,改了好几遍,感觉都没问题,最后搜了一下题解,嗯,题解也wa了,最后稀里糊涂的改了改,G++改成了C++,过了。