POJ 3122 Pie【二分答案】
阿新 • • 發佈:2018-09-21
std strong ace else pac 蛋糕 pan const +=
<題目鏈接>
題目大意:
將n個半徑不一但是高度為1的蛋糕分給 F+1個人,每個人分得蛋糕的體積應當相同,並且需要註意的是,每個人分得的整塊蛋糕都只能從一個蛋糕上切下來,而不是從幾個蛋糕上東拼西湊而成。現在問每人分得蛋糕的體積是多少。
解題分析:
就是普通的二分答案,但是要註意一下浮點型二分的結構,與整型二分略有不同。
#include <cstdio> #include <cmath> #include <algorithm> using namespace std; const double PI=acos(-1.0); int n,m,arr[10010]; const double eps=1e-6; bool juge(double x){ int sum=0; for(int i=1;i<=n;i++){ sum+=(int)(arr[i]/x); //當每個人得到x體積蛋糕時,最多能夠分給幾個人 } return sum>=(m+1); } int main(){ int T;scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); int maxv=-0x3f;for(int i=1;i<=n;i++){ scanf("%d",&arr[i]); arr[i]*=arr[i]; //先只進行半徑的平方,不乘上pi,防止損失精度 maxv=max(maxv,arr[i]); } double l=0,r=maxv*1.0; while(r-l>eps){ double mid=(l+r)/2; if(juge(mid))l=mid; elser=mid; } printf("%.4lf\n",l*PI); } return 0; }
2018-09-20
POJ 3122 Pie【二分答案】