题目大意:
分蛋糕,每人一块,不能重叠,求能够分得的最大蛋糕
解题思路:
二分,蛋糕与人数成正比,用二分求最大值
代码:
#include<iostream> #include<cmath> #include<algorithm> using namespace std; double pi=acos(-1.0); double pie[10010]; double sum,max; int main() { int i,n,f,t,radio,num; double l,r,mid; cin>>t; while(t--) { cin>>n>>f; f++; max=sum=0; for(i=0;i<n;i++) { cin>>radio; pie[i]=pi*radio*radio; max=max(pie[i],max); sum+=pie[i]; } l=max/f; r=sum/f; while(l+0.00001<r) { mid=(l+r)/2; num=0; for(i=0;i<n;i++) num+=(int)(pie[i]/mid); if(num<f) r=mid; else l=mid; } printf("%.4lf\n",l); } return 0; }
时间: 2024-11-05 22:44:24