poj 3122

来源:互联网 发布:js 几秒刷新一次 编辑:程序博客网 时间:2024/05/16 11:48

精度的原因,开始一直错,我这数学白痴学习了!

#include <iostream>#include <cstring>#include <cstdio>#include <math.h>#include <cstdlib>#include <algorithm>using namespace std;#define PI acos(-1.0)#define eps 1e-7double a[20500];int main (){int t;scanf("%d",&t);while(t--){int n,f;double left=0.0,right=1000000000.0;scanf("%d%d",&n,&f);f++;for(int i=1;i<=n;++i){scanf("%lf",&a[i]);a[i]=PI*a[i]*a[i];//if(right>a[i])//right=a[i];}while(right-left>eps){double mid=(left+right)/2;int p=0;for(int i=1;i<=n;++i){int times=a[i]/mid+(1e-12); // 为防止小数部分出现0.999999// 加的数要足够小, 1e-8居然还WA!!p+=times;}if(p>=f)left=mid;else right=mid;}printf("%lf\n",left);}return 0;}