您的位置:首页 > 其它

浮点数二分答案 HDU1969

2015-08-21 18:56 323 查看
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

double PI=acos(-1.0);
double arr[10010];
int n,m;

bool test(double mid)
{
int ans=0;
for(int i=0;i<n;i++)
{
ans+=(int)(arr[i]/mid);
}
if(ans>=m+1)
return true;
else
return false;
}

int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
double sum=0;
double rr;
for(int i=0;i<n;i++)
{
scanf("%lf",&rr);
arr[i]=PI*rr*rr;
sum+=arr[i];
}
double r=sum/(m+1);
double mid=0.0;
double l=0.0;
while(r-l>1e-6)
{
mid=(r+l)/2;
if(test(mid))
{
l=mid;
}
else
{
r=mid;
}
}
printf("%.4lf\n",mid);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: