题目: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;
}