二分搜索,注意一下pi的精度就好
1 #include<stdio.h> 2 #include <math.h> 3 double area[10005]; 4 double pi=acos(-1.0); 5 int n,f; 6 7 int cut(double x) 8 { 9 int count=0; 10 for(int i=0;i<n;i++) 11 { 12 count+=(int)(area[i]/x); 13 } 14 return count; 15 } 16 17 int main() 18 { 19 int t; 20 scanf("%d",&t); 21 while(t--) 22 { 23 scanf("%d%d",&n,&f); 24 double sum=0; 25 for(int i=0;i<n;i++) 26 { 27 double tmp; 28 scanf("%lf",&tmp); 29 area[i]=pi*tmp*tmp; 30 sum+=area[i]; 31 } 32 double l=0,r=sum/f,mid; 33 while(r-l>1e-6) 34 { 35 mid=l/2+r/2; 36 if(cut(mid)>f) 37 l=mid; 38 else 39 r=mid; 40 } 41 printf("%.4lf\n",l/2+r/2); 42 } 43 return 0; 44 }