WA了好多次,最后把 .2f 变成 .2f ;
黑人问号;
我觉得我 + 0.0049999 没啥问题
以后记住两件事情就好了
一是这种精度不必用while 直接 for 100次就好了
二是取整的方法直接*100/100
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
#define MAXN (200005)
double ropelong[MAXN];
int n, k;
bool check(double nw)
{
int cnt = 0;
for(int i = 1; i <= n; ++ i)
cnt += (int)(ropelong[i]/nw);
if(cnt < k) return false; // 如果 cnt 和 k 相等,
return true;
}
int main()
{
while(scanf("%d%d", &n, &k) != -1)
{
for(int i = 1; i <= n; ++ i)
scanf("%lf", &ropelong[i]);
double L = 0.0, R = MAXN;
while(R - L > 0.0000000001)
// for(int i = 1; i <= 100; ++ i)
{
double mid = (L+R)/2;
// cout << L << " " << R << " " << mid << endl;
if(!check(mid))
R = mid;
else L = mid;
}
// printf("%.2lf\n", R-0.00499);
printf("%.2f\n",floor(R*100)/100);
}
return 0;
}