0
点赞
收藏
分享

微信扫一扫

LA3635派

一只1994 2022-07-27 阅读 54

题意:
      有F+1个人来分n个圆形派,每个人分到的必须是一个整块的派,形状无所谓,每个人分到的必须一样多,给你每个派的半径,问每个人能分到的最大派的面积是多少。


思路:
      虽然不是求最小的最大或是最大的最小,但是这个题目依然可以用二分去做,我们枚举每个人分到的最大面积,这样就可以算出来这些派最多能够满足几个人的要求,然后去判断二分的方向,一开始eps写的有点小,TLE了一次,后来改大点AC了。

#include<stdio.h>

#include<math.h>



#define N 10000 + 10

#define eps 0.000001



double PI = acos(-1.0);



double ps[N];



bool ok(int mid ,int n ,int m)

{

int Sum = 0;

for(int i = 1 ;i <= n ;i ++)

{

Sum += int(ps[i] / mid);

}

return Sum >= m;

}







int main ()

{

int n ,m ,i;

double r ,Max;

while(~scanf("%d %d" ,&n ,&m))

{

Max = 0;

for(i = 1 ;i <= n ;i ++)

{

scanf("%lf" ,&r);

ps[i] = PI * r * r;

if(Max < ps[i]) Max = ps[i];

}

double low ,mid ,up ,Ans = 0;

low = 0 ,up = Max;

while(up - low >= eps)

{

mid = (low + up) / 2;

if(ok(mid ,n ,m + 1))

Ans = low = mid;

else up = mid;

}

printf("%.5lf\n" ,Ans);

}

return 0;

}










举报

相关推荐

0 条评论