您的位置:首页 > 其它

sdau-2 1003

2016-04-10 16:38 211 查看
题目:李华过生日了,买了一堆蛋糕(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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: