地址 http://poj.org/problem?id=1064
题解 二分即可
其实 对于输入与精度计算不是很在行
老是被卡精度
后来学习了一个函数 floor 向负无穷取整 才能ac
代码如下
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm> using namespace std; vector<double> v; int n, k; bool check(double m)
{
int count = ;
for (int i = ; i < v.size(); i++)
{
int cut = v[i] / m;
count += cut;
} if (count >= k) return false; return true;
} int main()
{
scanf("%d %d",&n,&k); for (int i = ; i < n; i++) {
double t;
scanf("%lf",&t);
v.push_back(t);
} sort(v.begin(),v.end()); double l = 0.001; double r = v.back(); for (int i = ; i < ; i++) {
double mid = (l + r) / ;
if (check(mid)) r = mid;
else l = mid + 0.0001;
} printf("%.2f", floor(l*)/);
return ;
}