1 条题解
-
0938936 LV 7 MOD @ 2019-08-27 23:24:58
二分答案直接判即可
注意由于切割精度所以最后答案向下取整,不要四舍五入#include<bits/stdc++.h> #define eps 0.00001 using namespace std; int n,k,a[100001]; bool check(double ans){//检测答案是否通过 int i,c=0;//c记录答案长度最大切割条数 double li; for(i=1;i<=n;i++){ li=(double)a[i]; c+=(int)(li/ans); } if(c>=k){//可以切k条则成功 return true; } return false; } int main(){ int i; scanf("%d %d",&n,&k); for(i=1;i<=n;i++) scanf("%d",a+i); double l=0,r=10000000.0,mid; while(r-l>eps){ mid=(l+r)/2; if(check(mid)) l=mid+eps; else r=mid; } //除去小数,向下取整到0.01 double ans=(int)(l*100); ans=(double)ans/100.0; printf("%.2lf",ans); }
- 1