二分答案
找到最大的圆的面积作为每个人可能分到的最大的面积。
对每个人可能分到的面积二分
验算时,求出每个pie可以切出的最大块数,然后总的块数和需要的块数比较
PS:(就是精度恶心)
#include <map> #include <cmath> #include <cstdio> #include <vector> #include <string> #include <cstring> #include <algorithm> using namespace std; const int maxn = 10005; const double eps = 1e-6; const double PI = acos(-1.0); double a[maxn]; int n,m; bool ok(double s) { int sum = 0; for(int i = 0;i<n;++i)sum+=floor(a[i]/s); return sum>=m; } int main() { // freopen("in.txt","r",stdin); int T;scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m);m++; double maxa = -1; for(int i = 0;i<n;++i) { double r;scanf("%lf",&r); a[i] = r*r*PI; maxa = max(maxa,a[i]); } double l = 0,r = maxa; while(r-l>eps) { double s = (l+r)/2; if(ok(s))l = s; else r = s; } printf("%.5f\n",l); } return 0; }
时间: 2024-10-11 12:32:51