#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,k;
double line[10055];
int cou(double num){(计算可以分割成的电缆数)
int tot=0,i;
for(i=1;i<=n;i++)
tot+=line[i]/num;
return tot;
}
int main(){
scanf("%d%d",&n,&k);
int i;
double left=0.00,right=0,mid;
for(i=1;i<=n;i++){
scanf("%lf",&line[i]);
right+=line[i];
}
right/=k;
sort(line+1,line+n+1);
int kk=0;
while(right-left>=0.001){
mid=(left+right)/2;
kk=cou(mid);
if(kk<k)right=mid;(如果少了就把切割的米数少一点,分得多些)
else left=mid;
}
right=floor(right*100)/100;(这里判断下,左右两个其实都有可能是答案)
left=floor(left*100)/100;
if(cou(right)>=k)
printf("%.2lf",right);
else printf("%.2lf",left);
}
结论:最后的我以为是答案小于1就输出0.00,结果在这里捣鼓半天,前面倒是没有太大的问题。
版权声明:本文为qq_36550533原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。