题意:某人过生日,他的朋友来他家参加party并且每人都拿来一块pie,现在需要把pie都分开让每个人都能享用,并且一定保证完整性,为了能公平的分给每个人,就算浪费也可以。问最多每个人可以得到多少体积的pie
思路:由于需要求圆柱体积所以π是一个问题,我们先把所有体积里的π提出来,然后二分枚举R^2(也就是体积),最后再乘上π即可。(注意π的精度需要很高)
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#define INF 0x3f3f3f3f
#define mod 100000000
using namespace std;
double esp=1e-5;
int main()
{
int t;
int n,f;
double r[20000];
scanf("%d",&t);
while(t--)
{
double sum =0 ;
scanf("%d%d",&n,&f);
f++;
for(int i=0;i<n;i++)
{
scanf("%lf",&r[i]);
r[i]=r[i]*r[i];
sum += r[i];
}
double low=0,high=sum/f,mid;
int cnt=0;
while(high-low>esp)
{
cnt=0;
mid=(low+high)/2;
for(int i=0;i<n;i++)
{
cnt += (int)r[i]/mid;
}
if(cnt<f)
high=mid;
else
low=mid;
}
printf("%.4f\n",mid*3.1415926535898);
}
return 0;
}