题意:N种蛋糕,每个半径给出,要分给F+1个人,要求每个人分的体积一样(形状可以不一样),而且每人只能分得一种蛋糕(不能多种蛋糕拼在一起),求每人最大可以分到的体积。
输入:
3
3 3
4 3 3
1 24
5
10 5
1 4 2 3 4 5 6 5 4 2
输出:
25.1327
3.1416
50.2655
#include <stdio.h> #include <iostream> #include <math.h> using namespace std; const double PI=acos(-1.0); int n,f; double s[105]; bool check(double x){ int peo=0; for(int i=0;i<n;i++){ peo+=(int)(s[i]/x); } if(peo>=f+1) return true; else return false; } int main(){ cin>>n>>f; double l=0,r=0,mid=0; for(int i=0;i<n;i++){ cin>>s[i]; s[i]=s[i]*s[i]*PI; r=max(r,s[i]); } while(r-l>1e-5){ mid=(l+r)/2; if(check(mid)){ l=mid; } else r=mid; } cout<<mid; return 0; }