给你n个蛋糕的半径,你有m个朋友,所以总共有m+1个人,现在要分蛋糕,要求每个人分到的大小都是一样的,且每个人的蛋糕都是从一块上切割下来的(不能是2个不同的蛋糕拼起来的),现在问每个人最多能分到多少蛋糕(体积),保留到小数点后4位输出。
Input
第一行是组数T,接下来是T组数据。
每组数据包含2行,第一行是n和m,均不超过10000,参考描述。
第二行是n个数,每个数表示一个蛋糕的半径,均不超过10000.
Output
对每组数据输出一个数一行,为分到的蛋糕的体积。
Sample Input
3
3 3
4 3 3
1 24
5
10 5
1 4 2 3 4 5 6 5 4 2
Sample Output
25.1327
3.1416
50.2655
Hint
比如第二组
1 24
5
表示有一个半径是5的蛋糕,所以体积是25pi,现在你们有1+24个人分,每人能分到pi
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int m,per;
double a[10005];
const double PI = acos(-1.0);
double check(double p){
int sum=0;
for(int i=0;i<m;i++)
sum+=(int)(a[i]/p); //floor(3.14)=3;小于一个数的最大整数
if(sum >= per) return true;
else return false;
}
int main()
{
int t;
cin>>t;
while(t--){
double maxn=0,r1;
cin>>m>>per;
per++;
for(int i=0;i<m;i++){
cin>>r1;
a[i]=r1*r1*PI;
maxn = max(maxn,a[i]);
}
double l=0,r=maxn,mid;
while(r-l>1e-5){
mid=(l+r)/2;
if(check(mid))
{
l=mid;
}
else
r=mid;
}
printf("%.4f\n",l);
}
return 0;
}