ACM—二分—Pie







timu

题目大意:给出n个披萨的半径,和f+1个人,需要求每个人最大所得到的披萨面积,要求每人只能有一块(即不能是两块拼接的)

附上代码:


#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define PI acos(-1.0)
int main()
{
 int t;
 while (cin>>t)
 {
  while (t--)
  {
   int n, f, r;
   double a[10005], v = 0, max;
   scanf("%d%d", &n, &f);
   f++;
   for (int i = 0; i<n; i++)
   {
    cin >> r;
    a[i] = r*r*PI;
    v += a[i];
   }
   max = v / f;
   double left, right, mid;
   left = 0;
   right = max;
   int ans;
   while ((right - left)>1e-4)
   {
    int flag = 0, k = 0;
    ans = 0;
    mid = (left + right) / 2;
    for (int i = 0; i<n; i++)
    {
     ans += (int)(a[i] / mid);
     if (ans >= f)
      flag = 1;
     if (flag == 1) break;
    }
    if (flag == 1)
     left = mid;
    else
     right = mid;
   }
   printf("%.4lf\n", mid);
  }
 }
 return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40783693/article/details/80466873