1. 程式人生 > >POJ 1064Cable master(二分查詢)

POJ 1064Cable master(二分查詢)

【中文題意】有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; }