分蛋糕,给你n块圆形蛋糕然后f个朋友带上你自己是f+1个人
求每个人分一整块最大能有多大,(就是不能剩余的蛋糕拼接,每个人必须是一整块)
所以我们要找到这个分界点
然后这道题用二分写,找到最大的蛋糕,然后取中间值,每个蛋糕都除以这个mid,最后把他们除以mid的取整+起来,看是否够分
如果够分怎left=mid(说明一个人分mid够,并且有剩余),如果不够分就right=mid(mid取大了,不够分),
输出格式,和精度,需要注意
#include<stdio.h>
#include<string.h>
#include<math.h>
#include <iostream>
using namespace std;
double pi=acos(-1.0);
double a[100002];
int n,f,m;
int judge(double x){
int sum=0;
for(int i=0;i<n;i++)
{
sum+=int(a[i]/x);
}
if(sum>=f) return 1;
else return 0;
}
int main(){
scanf("%d",&m);
while(m--)
{
double maxn=0;
scanf("%d%d",&n,&f);
f++;
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i]);
a[i]=a[i]*a[i]*pi;
maxn=max(maxn,a[i]);
}
double l=0,r=maxn,mid;
while(r-l>1e-6)
{
mid=(l+r)/2;
if(judge(mid)) l=mid;
else r=mid;
}
printf("%.4lf\n",r);
}
return 0;
}