题目描述
有 N 根绳子,第 i 根绳子长度为 Li,现在需要 M 根等长的绳子,你可以对 N 根绳子进行任意裁剪(不能拼接),请你帮忙计算出这 M 根绳子最长的长度是多少。
C++ 代码
#include<iostream>
using namespace std;
const int N = 100010;
int n,m;
int a[N];
int check(double x)
{
int b = 0;
for(int i = 1;i <= n;i++)
{
b += a[i]/x;
if(b >= m)
return 1;
}
return 0;
}
int main()
{
cin>>n>>m;
for(int i = 1;i <= n;i++)
cin>>a[i];
double l = 0,r = 1e9; //mid = l + (r-l)/2 防止溢出
while(r-l>1e-4) //浮点数二分不用处理边界问题
{
double mid = (l+r)/2;
if(check(mid))
l = mid;
else
r = mid;
}
printf("%.2f\n",r);
return 0;
}