poj1064(二分)Cable master

xiaoxiao2021-02-28  109

//二分判断 /*假定一个解并判断是否可行 题意:有n条绳子,长度分别为L[i]。如果从他们中切割出k条长度相同的绳子的话,这k条绳子每条最长能有多长?(答案保留小数点后两位,规定1单位长度的绳子最多可以切割成100份)。 */ #include<cstdio> #include<iostream> #include<cmath> using namespace std; double a[10002],ans; int n,k; int iswork(double b) { int cnt=0; for(int i=0;i<n;++i) cnt+=(int)(a[i]/b); return cnt>=k; } void solve() { int cnt=101; double l=0,r=ans; while(cnt--) { double mid=(l+r)/2; if(iswork(mid)) l=mid; else r=mid; } printf("%.2lf\n",floor(r*100)/100);//这个地方要注意 } int main(){ while(~scanf("%d%d",&n,&k)) { ans=-1e18; for(int i=0;i<n;++i) scanf("%lf",a+i),ans=max(ans,a[i]); solve(); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-54078.html

最新回复(0)