这是刚接触acm时做的一道题 当时还不知道啥是二分 被教做人
想了个贪心的思路还觉得美滋滋 然后WA了半天
看了题解 因为printf("%.4lf\n",ans); 又WA了半天
二分每块蛋糕的大小 然后看能不能凑的出来
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
#define PI acos(-1.0)
#define N 0x3f3f3f3f
#define eps 1e-6
double s[10010];
double f;
int n;
bool judge(double lim)
{
int i,t,cnt;
cnt=0;
for(i=1;i<=n;i++)
{
t=s[i]/lim;
cnt+=t;
}
if(cnt>=f) return true;
else return false;
}
void binsearch()
{
double l,r,m,ans;
int i;
l=N;
for(i=1;i<=n;i++)
{
l=min(l,s[i]);
}
l/=f;
r=0;
for(i=1;i<=n;i++)
{
r=max(r,s[i]);
}
ans=l;
while(r-l>=eps)
{
m=(l+r)/2;
if(judge(m))
{
l=m;
ans=m;
}
else
{
r=m;
}
}
printf("%.4f\n",ans);
return;
}
int main()
{
int t,i;
scanf("%d",&t);
while(t--)
{
scanf("%d%lf",&n,&f);
f++;
for(i=1;i<=n;i++)
{
scanf("%lf",&s[i]);
s[i]=PI*s[i]*s[i];
}
binsearch();
}
return 0;
}