开始遇到题目,以为就是简单的计算sum然后除f+1呢。。。惭愧了~
二分法求线性方程的解、折半查找这些代码都写过,不过那些都是教科书上的东西,今天自己做了这道题,才发现,原来这就是二分。。。
Problem : 1969 ( Pie ) Judge Status : Accepted
RunId : 5918963 Language : C Author : qq1203456195
Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
RunId : 5918963 Language : C Author : qq1203456195
Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
#include <stdio.h> #include <math.h> #define PI 3.1415926535897931 double v[10001]; int n,f; int test(double x) { int s=0,i; for (i=0;i<n;i++) s+=(int)(v[i]/x); return s>=f?1:0; } int main() { int cas,i,r; double sum,max; double left,right,mid; scanf("%d",&cas); while (cas--) { scanf("%d%d",&n,&f); f+=1; sum=0; for (i=0;i<n;i++) { scanf("%d",&r); v[i]=(double)PI*r*r; sum+=v[i]; } max=sum/f; left=0.0; right=max; while ((right-left)>1e-6) { mid=(left+right)/2.0; if (test(mid)) left=mid; else right=mid; } printf("%.4lf\n",mid); } return 0; }