POJ 3122 Pie二分答案
Posted 00isok
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3122 Pie二分答案相关的知识,希望对你有一定的参考价值。
<题目链接>
题目大意:
将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; else r=mid; } printf("%.4lf ",l*PI); } return 0; }
2018-09-20
以上是关于POJ 3122 Pie二分答案的主要内容,如果未能解决你的问题,请参考以下文章