poj3122 pie

方法:二分。

题目意思:要过生日了,我请大家吃pie,然后人数一共是f+1(我自己)。每个人的pie不能是拼接的,而且每个人的面积是一样的,这样就用二分枚举。

范围是0~最大的那块pie。

然后用每一块去除枚举值,加到cnt上,当cnt>=f+1时候找大一点的面积, 否则找小一点的面积

pie的值要取得精确一点 , = =

另外在输出时候要是%f,如果用%lf会WA的。

上代码!

 1 #include <stdio.h>
 2 #include <math.h>
 3 #define  pie 3.1415926535897932384626433
 4 double Pies[10000+10];
 5 int n,f;
 6 double find(double mmax){
 7     int cnt;
 8     int i;
 9     double left=0;
10     double right=mmax;
11     double mid;
12     double res=0;
13     while(right-left>0.00001){
14         mid=(right+left)/2;
15         cnt=0;
16         for(i=0;i<n;++i){
17             cnt+= (int)(Pies[i]/(mid));
18         }
19         if(cnt>=f){
20             left=mid;
21             if(mid>res)
22                 res=mid;
23         }
24         else       right=mid;
25     }
26     return mid;
27 }
28 
29 
30 int main(){
31     int i,j;
32     int Case;
33     double mmax;
34     double res;
35     while(~scanf("%d",&Case)){
36         while(Case--){
37             scanf("%d%d",&n,&f);
38             f++;
39             mmax=-1;
40             for(i=0;i<n;++i){
41                 scanf("%lf",&Pies[i]);
42                 Pies[i]=pie*Pies[i]*Pies[i];
43                 if(Pies[i]>mmax) mmax=Pies[i];
44             }
45             res=find(mmax);
46             printf("%.4f\n",res);
47         }
48     }
49     return 0;
50 }
51             

 

posted on 2014-02-16 22:35 symons 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/symons1992/p/3551889.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值