uva 12097(二分)

Posted 发牌员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva 12097(二分)相关的知识,希望对你有一定的参考价值。

就是二分

#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;
}

 

以上是关于uva 12097(二分)的主要内容,如果未能解决你的问题,请参考以下文章

UVA 12124 - Assemble(二分)

UVa 1616 Caravan Robbers (二分+贪心)

Gym 101464C - 计算几何+二分(uva1463)

UVA 1475 - Jungle Outpost(二分 + 半平面交)

uva:10487 - Closest Sums(二分查找)

uva 1121 Subsequence