POJ 1064Cable master(二分查詢)
阿新 • • 發佈:2019-02-06
【中文題意】有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;
}