#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
using namespace std;
int n,f;
double a[20000];
int main()
{
int i,t;
double l=0,r=0,pi=3.141592653589793,mid; //此题的坑:pi必需非常精确
cin>>n; cin>>f;
f+=1;
for(i=1;i<=n;i++)
{
cin>>a[i];
a[i]=a[i]*a[i]*pi; //折半查找要找的是总量,即总体积或有时是总面积
if(a[i]>r) r=a[i];
}
r+=0.0001; //加的都是最小单位长度
while(l+0.0001<r)
{
t=0;
mid=(l+r)/2;
for(i=1;i<=n;i++)
t+=a[i]/mid;
if(t>=f) l=mid;
else if(t<f) r=mid;
}
printf("%.3f",l);
return 0;
}
NOI题库之二分 派
最新推荐文章于 2022-11-16 10:53:41 发布