当前位置: 代码迷 >> 综合 >> LA 3635 Pie
  详细解决方案

LA 3635 Pie

热度:82   发布时间:2023-12-06 08:36:13.0

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