POJ 3122(二分算法)

第一次写二分的题,幸好这个题卡的不严,就马马虎虎过了。。。。。

代码很简单   不说什么了。。。。

 

 

 

 

#include #include #include using namespace std; const double PI=3.1415926535897932; const double ln=1e-5; double sum; double a[10010]; int main(int argc, char** argv) { int cas,i,j,flg=0,n,f; scanf("%d",&cas); while(cas--){ scanf("%d%d",&n,&f); f++;sum=0;flg=0; for(i=1;i<=n;i++){ scanf("%lf",&a[i]); a[i]*=a[i]; sum+=a[i]; } double lef,rig,mid; lef=0; rig=sum/f; mid=(lef+rig)/2; while(rig-lef>ln){ flg=0; for(i=1;i<=n;i++){ flg+=(int)(a[i]/mid); } if(flg>=f) lef=mid; else rig=mid; mid=(lef+rig)/2; } printf("%.4lf/n",mid*PI); } return 0; } 

 

 

你可能感兴趣的:(POJ 3122(二分算法))