POJ 3122 Pie
题目大意:
给出n个pie的直径,有f+1个人,如果给每人分的大小相同(形状可以不同),每个人可以分多少。要求是分出来的每一份必须出自同一个pie,也就是说当pie大小为3,2,1,只能分出两个大小为2的份,剩下两个要扔掉。
解题思路:
对每一个人分的大小进行二分查找,注意输出要用cout。
下面是代码:
#include <stdio.h> const double pi=3.14159265359; const double esp=1e-6; int main() { int T; scanf("%d",&T); while(T--) { int n,f,i,j,cnt; scanf("%d%d",&n,&f); f++; double a[10005],low=0,high=0,mid,in; for(i=0;i<n;i++) { scanf("%lf",&a[i]); a[i]*=a[i]; if(high<a[i]) { high=a[i]; } } while(high-low>esp) { mid=(low+high)/2; cnt=0; for(i=0;i<n;i++) { in=a[i]; while(in>=mid) { in-=mid; cnt++; } } if(cnt<f) { high=mid; } else { low=mid; } } printf("%.4f\n",mid*pi); } return 0; }