【POJ】3122 Pie [二分查找]
题目地址:http://poj.org/problem?id=3122
二分每块饼的体积。为了保证精度,可以先二分半径的平方r*r,最后再乘以PI。要注意一点,要分的人数要包括自己,及f+1。
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace std; const int N=1e4+11; const double PI = acos(-1.0); const double EPS = 1e-6; int n,m; double a[N]; double INF; void init() { INF=0; } int check(double x) { int cnt=0; for(int i=0;i<n;i++){ cnt+=(int)a[i]/x; } return cnt; } double BinSearch(double* a) { double head=0, tail=INF; double mid; while(head+EPS<tail){ mid=(head+tail)/2.0; if(check(mid)<m){ tail=mid; } else { head=mid; } } return mid; } int main() { int T; scanf("%d",&T); while(T--){ init(); scanf("%d%d",&n,&m); m++; for(int i=0;i<n;i++){ scanf("%lf",&a[i]); a[i]=a[i]*a[i]; if(a[i]>INF) INF=a[i]; } printf("%.4f\n",BinSearch(a)*PI); } return 0; }