题目大概:
输出n根木棍的长度,把它们折成m根相同长度的木棍,问折成的最大长度是多少。
思路:
这个题是以前做过的一道非常坑爹的二分题。队精度要求较高。就是最后不能四舍五入。
感想:
这个也勉强算是广搜吧,不知道为什么吧这道题放在搜索里。
代码:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
double l,r=0,mid;
double sum=0;
double a[100600];
int main()
{int n,m,j=0;
while(scanf("%d%d",&n,&m)){
if(n==0&&m==0)break;
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;
}