poj 3122 Pie (二分)

题目:http://poj.org/problem?id=3122

题意:

就是公平地分披萨pie

我生日,买了n个pie,找来f个朋友,那么总人数共f+1人

每个pie都是高为1的圆柱体,输入这n个pie的每一个尺寸(半径),如果要公平地把pie分给每一个人(就是所有人得到的pie尺寸一致,但是形状可以不同),而且每个人得到的那份pie必须是从同一个pie上得到的


代码:

View Code
 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 using namespace std;
 5 const double esp=1e-6;
 6 const double pi=3.14159265359;
 7 int main()
 8 {
 9     int t;
10     scanf("%d",&t);
11     while(t--)
12     {
13         int n,m;
14         double a[10010];
15         int i;
16         scanf("%d%d",&n,&m);
17         double high=0;
18         double low=0;
19         for(i=0;i<n;i++)
20         {
21             scanf("%lf",&a[i]);
22             a[i]*=a[i];
23             if(a[i]>high)
24             high=a[i];
25         }
26         double mid;
27 
28         while(high-low>esp)
29         {
30             mid=(low+high)/2;
31             int num=0;
32             for(i=0;i<n;i++)
33             {
34                 num+=(int)a[i]/mid;
35             }
36             if(num>=m+1)
37             low=mid;
38             else
39             high=mid;
40         }
41         printf("%.4f\n",mid*pi);
42     }
43     return 0;
44 }
原文地址:https://www.cnblogs.com/wanglin2011/p/2920635.html