题意:
给出n个木板,求出能割k个木板的最大长度。
思路:
挑战编程有个使用二分查找的方式,能很好的实现
不过要注意的是精度,需要向下取整,又学到一个新的函数,开心。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int inf = 0x3f3f3f3f;
int n,k;
double L[10001];
int C(double x)
{
int num = 0;
for(int i = 0;i < n; i++){
num += (int)(L[i]/x);
}
return num >= k;
}
int main()
{
//freopen("in.txt","r",stdin);
double lu,ru;
lu = 0,ru = inf;
scanf("%d%d",&n,&k);
for(int i = 0;i < n; i++){
scanf("%lf",&L[i]);
}
double mid;
for(int i = 0;i < 1000; i++){
mid = (lu+ru)/2.0;
if(C(mid)){
lu = mid;
}
else
ru = mid;
}
printf("%.2f\n",floor(ru*100)*0.01);
return 0;
}