二分查找

来源:互联网 发布:淘宝可以用花呗付款吗 编辑:程序博客网 时间:2024/06/09 19:24
#include<cstdio> #include<cmath>const double pi = acos(-1.0);int a[10005];double v[10005];int n,f,k;int f1(double x){int sum2 = 0;for(int i =1;i<=n;i++){sum2 += (int)(v[i]/x);}if(sum2>f)return 1;else if(sum2==f)return 2;elsereturn 0;}int main(){while(scanf("%d",&k)!=EOF){while(k--){double sum = 0.0;double max = 0.0;scanf("%d%d",&n,&f);f++;for(int i = 1;i<=n;i++){scanf("%d",&a[i]);v[i] = a[i]*a[i]*pi;sum+=v[i];}max = sum/f*1.0;int tool = 0;double x = max;double y = 0.0;double mid;while(x-y>1e-5){mid = (x+y)/2.0;if(f1(mid)==1)y = mid;else if(f1(mid)==2)break;elsex = mid;}printf("%.4lf\n",mid);}}return 0;}

原创粉丝点击