方法:二分。
题目意思:要过生日了,我请大家吃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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步