uva 12097(二分)

时间:2017-08-25 13:18:31   收藏:0   阅读:231

就是二分

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const double pi=acos(-1.0);
const int maxn=10000+100;
int t,n,f;
double a[maxn];
const double esp=1e-5;
bool is_ok(double ss)
{
    int ans=0;
    for(int i=1;i<=n;i++)
      ans+=floor(a[i]/ss);
    if(ans<f+1) return 1;
    else return 0;
}
int main()
{
   scanf("%d",&t);
   while(t--)
   {
       scanf("%d%d",&n,&f);
       double r,maxi=0;
       for(int i=1;i<=n;i++)
       {
           scanf("%lf",&r);
            a[i]=pi*r*r;
          maxi=max(maxi,a[i]);
       }
       double l=0;
       r=maxi;
       while(r-l>esp)
       {
             double mid=(l+r)/2.0;
          if(is_ok(mid)) r=mid;
          else l=mid;
       }
       printf("%.4lf\n",l);
   }
    return 0;
}

 

原文:http://www.cnblogs.com/Wangwanxiang/p/7427288.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!