二分题目,挺简单的~~
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
double pie[10001];
int n,m;//n表示蛋糕的个数,m表示人数
const double PI=acos(-1.0);
inline bool Jude(double mid)
{
int i;
int sum=0;
for(i=0;i<n;i++)
{
sum+=int(pie[i]/mid);
if(sum>=m) return true;
}
return false;
}
int main()
{
// freopen("slyar.in","r",stdin);
// freopen("slyar.out","w",stdout);
double st,en,mid;
int t,i;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);//m表示人数
m++;
for(i=0;i<n;i++)
{
scanf("%lf",&pie[i]);
pie[i]=pie[i]*pie[i]*PI;//每块饼的面积
}
sort(pie,pie+n);
reverse(pie,pie+n);
st=0;//最少的面积
en=pie[0];//最大的面积
if(m<=n) n=m;
while(en-st>1e-5)
{
mid=(st+en)/2;
if(Jude(mid))
{
st=mid;
}
else
{
en=mid;
}
}
printf("%.4lf\n",st);
}
// fclose(stdin);
// fclose(stdout);
return 0;
}