题目:Pie
思路:二分。
注意:计算pi时要用 acos(-1.0) ,不能写3.1415926,不然会有精度问题,当然也可以多打几位(11位以上)。
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <cstring>
#include <map>
#include <cmath>
using namespace std;
#define maxn 10000
#define db double
#define mindv 1e-5
#define pi acos(-1.0)
int n,m;
db a[maxn+5];
db maxs;
bool judge(db x){
int j=0;
for(int i=1;i<=n;i++){
j+=floor(a[i]/x);
}
if(j>=m+1) return true;
return false;
}
int main() {
int T=0;
scanf("%d",&T);
while(T--){
maxs=-1;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
db x;
scanf("%lf",&x);
a[i]=pi*x*x;
maxs=max(maxs,a[i]);
}
db l=0,r=maxs;
while(mindv<r-l){
db mid=(l+r)/2;
if(judge(mid)) l=mid;
else r=mid;
}
printf("%.4lf\n",r);
}
return 0;
}
本文介绍了一个使用二分查找法解决的问题——如何在给定一系列圆的半径和所需圆饼数量的情况下,找到最大的圆饼面积,使得切割后的圆饼数量不少于指定数目。文章提供了完整的C++代码实现,并强调了在计算π值时采用高精度方法的重要性。
387

被折叠的 条评论
为什么被折叠?



