题目:http://poj.org/problem?id=3122
题意:
就是公平地分披萨pie
我生日,买了n个pie,找来f个朋友,那么总人数共f+1人
每个pie都是高为1的圆柱体,输入这n个pie的每一个尺寸(半径),如果要公平地把pie分给每一个人(就是所有人得到的pie尺寸一致,但是形状可以不同),而且每个人得到的那份pie必须是从同一个pie上得到的
代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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 }