题目链接:http://poj.org/problem?id=1064
【中文题意】有n条绳子,他们的长度分别为Li。如果从它们中切割出K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留到小数点后2位。
【思路分析】二分查找绳子的长度。找到最大的符合条件的。
【AC代码】
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<algorithm>
using namespace std;
#define N 10005
int n,k;
double INF=110005;
double L[N];
bool C(double x)
{
int num=0;
for(int i=0;i<n;i++)
{
num+=L[i]/x;
}
return num>=k;
}
void solve()
{
double lb=0,ub=INF;
while(ub-lb>1e-5)
{
double mid=(lb+ub)/2.0;
if(C(mid))lb=mid;
else ub=mid;
}
printf("%.2f\n",floor(ub*100)/100);
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
for(int i=0;i<n;i++)
{
scanf("%lf",&L[i]);
}
solve();
}
return 0;
}
来源:CSDN
作者:夜幕下的ACM之路
链接:https://blog.csdn.net/qq_32866009/article/details/54837720