0
点赞
收藏
分享

微信扫一扫

二分贪心--06


题目大概:

给出n根长度不同的木棒,让我们切成长度相同的m根木棒,问切的木棒的最长长度是多少。

思路:

每根木棒的长度和根数成反比。

长度 l =0,,r为木棒总长度除m。mid=(l+r)/2.。

用二分法不断逼近最大的长度即可。

最后取右端点。

代码:

#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
double l,r=0,mid;
double sum=0;
double a[100600];
int main()
{int n,m,j=0;

scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{scanf("%lf",&a[i]);
sum+=a[i];
}
sum=sum/(double)(m);
l=0;r=sum;

while(r-l>1e-10)
{mid=(l+r)/2;
j=0;
for(int i=0;i<n;i++)
{j+=(int)(a[i]/mid);

}
if(j>=m){l=mid;}
else r=mid;
}
printf("%.2f\n",r=(int)(r*100)/100.0);
return 0;
}



举报

相关推荐

0 条评论