二分题,卡精度,刚开始我是先转化为整数做的,wa到死,破水题!!!
#include <stdio.h>
#include <stdbool.h>
int N,K;
double cable[10001];
bool is_ok(double size)
{
int i,sum=0;
for(i=0;i<N;i++)
sum+=(int)(cable[i]/size);
if(sum>=K) return true;
else return false;
}
int main(int argc, char const *argv[])
{
int i;
double r,l,mid,sum;
while(scanf("%d %d",&N,&K)==2&&N&&K)
{
sum=0.0;
for(i=0;i<N;i++)
{scanf("%lf",cable+i);sum+=cable[i];}
if(sum<K*0.01) {printf("0.00\n");continue;}//怎么剪都不够
sum/=K;
if(is_ok(sum)) {printf("%.2lf\n",sum);continue;}
l=1,r=sum+0.005;//不加0.005就wa了
while(r-l>0.00001)
{
mid=l+(r-l)/2;
if(is_ok(mid)) l=mid;
else r=mid;
}
printf("%.2lf\n",mid );
}
return 0;
}