题目大意就是给你n条绳子,和每条绳子的长度,要求你切出k条相同长度的绳子。求能够切的最大长度,答案保留两位小数
这道题就是给定一个上限和下限对答案进行二分然后注意处理一下精度就ok了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
#define inf 0x7fffffff
int n,k;
double kep[10000];
bool C(double x)
{
int sum=0;
for(int i=0;i<n;i++)
{
sum=sum+(int)(kep[i]/x);
}
if(sum>=k)
return true;
else
return false;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
for(int i=0;i<n;i++)
scanf("%lf",&kep[i]);
double le,rg,mid;
le=0,rg=inf;
for(int i=0;i<100;i++) //这里开到100就是对精度进行处理
{
mid=(rg+le)/2;
if(C(mid))
le=mid;
else
rg=mid;
}
printf("%.2lf\n",floor(le*100)/100);
}
// system("pause");
return 0;
}