symons

___________每一天都是幸福的!!

  博客园  ::  :: 新随笔  ::  :: 订阅 订阅  :: 管理
  215 随笔 :: 0 文章 :: 7 评论 :: 80068 阅读

方法:二分。

题目意思:要过生日了,我请大家吃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   symons  阅读(154)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示