题目:李华过生日了,买了一堆蛋糕(N个),来了一堆朋友(F个),让这F+1个人平分这堆蛋糕。每人只能分一块,蛋糕可以浪费,不能分的不均。假如你是李华,请你帮忙分一下蛋糕。
思路:一开始没注意到每人一块,以为是水题,结果GG。就是老师上课讲的那道题,不过long long我用VC编译不通过,就改double了。
每个人分到最大的面积是最大的那个,所以在0到max间找。mid*人数=max用这个式子一直循环二分,就能得出答案。
代码:
#include <iostream>
#include <cstdio>
const double pi = 3.1415926;
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, f, r;
double a[10010], high = 0, low = 0;
cin >> n >> f;
f++;
for (int i = 0; i < n; i++)
{
cin >> r;
a[i] = pi * r * r;
if (high < a[i])
high = a[i];
}
double mid;
while (high-low> 1e-6)
{
mid = (high+low) / 2;
int p = 0;
for (int i = 0; i < n; i++)
{
p += int(a[i] / mid);
}
if (p>= f)
low= mid;
else
high = mid;
}
printf("%.4lf\n", mid);
}
return 0;
}