题目链接:点击打开链接
题意:给你 n 块蛋糕,m 个人,求出 m+1 个人能分得的蛋糕最大为多少(分的大小一样)
题解:
运用二分法,求出 sum / mid 的值,使这个值不小于m+1 ;
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;
int main()
{
int T; cin>>T;
while(T--){
int n,f;
cin>>n>>f;
double a[10000+100];
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
int r; cin>>r;
a[i]=acos(-1.0)*r*r;
}
double l=0,r=1e9+7;
while(r-l>1e-5){
int sum=0;
double mid=(l+r)/2;
for(int i=0;i<n;i++){
sum+=(int)(a[i]/mid);
}
if(sum>=f+1){
l=mid;
}
else{
r=mid;
}
}
cout<<fixed<<setprecision(4)<<l<<endl;
}
return 0;
}