我的生日快到了,传统上我在做馅饼。不只是一个馅饼,不,我有N个,口味各异,大小各异。我的F个朋友来参加我的聚会,他们每个人都得到一块馅饼。这应该是一块一块,而不是几个小块,因为看起来很乱。虽然这块可以是一个整体。
我的朋友很烦人,如果其中一个比其他人得到更大的回报,他们就会开始抱怨。因此,即使它们导致一些派变质(比破坏党派更好),它们也应均等大小(但不一定相等)。当然,我也想为自己准备一块馅饼,并且该块也应具有相同的大小。
我们所有人都能得到的最大单件尺寸是多少?所有的饼都是圆柱形的,并且高度都相同1,但是饼的半径可以不同。
输入:
带有正整数的一行:测试用例的数量。然后对于每个测试用例:
—一行包含两个整数N和F,且1 <= N,F <= 10000:派子数和朋友数。
—包含N个整数ri且1 <= ri <= 10000的一行:饼的半径。
输出:
对于每个测试用例,输出一行最大可能的音量V,这样我和我的朋友都可以得到一个大小为V的饼图。答案应该是一个浮点数,绝对误差最大为10 ^( -3)。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi=acos(-1.0);//3.1415926535897
int n,m;
double a[10010];
bool check(double mid)
{
int cnt=0;
for(int i=0;i<n;i++)
{
cnt+=(int)(a[i]/mid);//强制转化为int型
}
return cnt>=m;
}
int main()
{
int t,k;
cin>>t;
while(t--)
{
double r=0;
scanf("%d%d",&n,&m);
m++;
for(int i=0;i<n;i++)
{
scanf("%d",&k);
a[i]=pi*k*k;
if(a[i]>r)
r=a[i];
}
double l=0;
for(int i=0;i<100;i++)
{
double mid=l+(r-l)/2;
if(check(mid))
l=mid;
else
r=mid;
}
printf("%.4f\n",r);
}
return 0;
}