网页链接
http://acm.hdu.edu.cn/showproblem.php?pid=1551
题意就是给你n个树枝的长度,让你把树枝都切开K个相等的小树枝,要求小树枝尽可能长。
二分一下长度就好。
AC代码
#include<stdio.h>
#include<math.h>
#include<string.h>
const double eps=1.0e-9;
const int N=10000;
double num[10010],right,result;
int n,k;
int cont(double a)
{
int sum=0;
for(int i=1;i<=n;i++)
{
sum+=int(floor(num[i]/a));
}
return sum;
}
void serch()
{
double l,r,mid;
int shu;
l=0.0;
r=right;
while(r-l>eps)
{
mid=(l+r)/2;
shu=cont(mid);
if(shu>=k)
{
l=mid;
result=mid;
}
else
r=mid;
}
}
int main()
{
while(scanf("%d%d",&n,&k )&& n+k)
{
right=0;
memset(num,0,sizeof(num));
for(int i=1;i<=n;i++)
{
scanf("%lf",&num[i]);
right+=num[i];
}
result = 0.0;
serch();
printf("%.2lf\n",result);
}
}