题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1530
题意:有n个半价为ri圆柱形的蛋糕,有m人分,规则要求每一个人得到的必须是一块(可以不完整,但必须是一整块,也就是不可以多块组成),问如何分最多
思路:二分体积(可以先不乘pi),用体积除去每一个人份的体积x得出最多可分y份,y>x则符合,之前用了比较复制的方法超时了几次……pi的精度要求也wa了几次……
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define pi acos(-1)
#define eps 0.000001
using namespace std;
int s[100030],a[100030];
int t,n,m;
int check(double x)
{
int flag=1,sum=0;
for (int j=0;j<n;j++)
{
sum+=s[j]/x;
}
// if (flag==0) flag2=0;
if (sum>=m) return 1;
else return 0;
}
int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
m++;
int maxx=-0x3f3f3f3f;
for (int i=0;i<n;i++)
{
scanf("%d",&s[i]);
s[i]*=s[i];
maxx=max(maxx,s[i]);
}
double l=0,r=maxx,mid;
while (r-l>eps)
{
mid=(l+r)/2;
if (check(mid))
{
l=mid;
}
else
{
r=mid;
}
}
printf("%.4f\n",mid*pi);
}
}