LA 3635 Pie

  二分答案

  找到最大的圆的面积作为每个人可能分到的最大的面积。

  对每个人可能分到的面积二分

  验算时,求出每个pie可以切出的最大块数,然后总的块数和需要的块数比较

  PS:(就是精度恶心)

  

#include <map>
#include <cmath>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 10005;
const double eps = 1e-6;
const double PI = acos(-1.0);
double a[maxn];
int n,m;
bool ok(double s)
{
    int sum = 0;
    for(int i = 0;i<n;++i)sum+=floor(a[i]/s);
    return sum>=m;
}
int main()
{
//    freopen("in.txt","r",stdin);
    int T;scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);m++;
        double maxa = -1;
        for(int i = 0;i<n;++i)
        {
            double r;scanf("%lf",&r);
            a[i] = r*r*PI;
            maxa = max(maxa,a[i]);
        }
        double l = 0,r = maxa;
        while(r-l>eps)
        {

            double s = (l+r)/2;
            if(ok(s))l = s;
            else r = s;
        }
        printf("%.5f\n",l);
    }
    return 0;
}

 

posted on 2015-01-21 11:57  round_0  阅读(110)  评论(0编辑  收藏  举报

导航