题意:
有N条电缆,他们的长度分别为Li,如果从它们中切割出k条长度相同的电缆的话,这K条电缆每条的最大长度
思路:
将电缆的长度进行二分,查找出 >=k 的 mid 的最大值
注意精度
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn= 10010;
int n,k;
double a[maxn];
bool ok(double mid)
{
int cnt=0;
for(int i=0;i<n;i++)
cnt+=a[i]/mid;
return cnt>=k;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
for(int i=0;i<n;i++)
scanf("%lf",&a[i]);
double L=0,R=100001;
for(int i=0;i<25;i++) //一次循环可以把区间的范围缩小一半,而25次循环(2^-25)可以达到10^-7精度范围 使 R/(2^25) 取得三位小数
{
double mid=(L+R)/2;
if(ok(mid))
L=mid;
else
R=mid;
}
printf("%.2lf\n",floor(R*100)/100); //防止输出的值 四舍五入 因为求的是最大值 所以用R
}
return 0;
}