HDU 1969

陶叔说的比较灵活的二分

开始的时候并没有弄清楚这是什么情况

再想到二分

 

那么就是把最大Pie的面积作为上界,下界为0

就解决了

 1 #include <iostream>
 2 #include <cmath>
 3 #include <algorithm>
 4 #include <stdio.h>
 5 using namespace std;
 6 
 7 
 8 int main()
 9 {
10     int T;
11     cin>>T;
12     for(int test = 0;test<T;test++)
13     {
14     int N,F;
15     cin>>N>>F;
16     F+=1;
17 
18     int* Radius = new int[N];
19     double* Pie = new double[N];
20     for(int i =0;i<N;i++)
21     {
22     cin>>Radius[i];
23     Pie[i] = Radius[i]*Radius[i]*acos(-1.0);
24     }
25 
26     sort(Pie,Pie+N);
27 
28     double high = Pie[N-1];
29     double low = 0;
30 
31     while(high-low>1e-5)
32     {
33         double mid = (high + low)/2.0;
34         bool isEnough = false;
35         int num = 0;
36         for(int j =0; j<N ; j++)
37         {
38             num+=(int)(Pie[j]/mid);
39        }
40          isEnough = (num>=F);
41         if(isEnough)
42         {
43             low = mid;
44         }else
45         {
46         high = mid;
47         }
48     }
49     printf("%.4lf\n",(high+low)/2.0);
50     }
51 
52     return 0;
53 }

转载于:https://www.cnblogs.com/Run-dream/p/3857360.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值