就是二分
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; const double pi=acos(-1.0); const int maxn=10000+100; int t,n,f; double a[maxn]; const double esp=1e-5; bool is_ok(double ss) { int ans=0; for(int i=1;i<=n;i++) ans+=floor(a[i]/ss); if(ans<f+1) return 1; else return 0; } int main() { scanf("%d",&t); while(t--) { scanf("%d%d",&n,&f); double r,maxi=0; for(int i=1;i<=n;i++) { scanf("%lf",&r); a[i]=pi*r*r; maxi=max(maxi,a[i]); } double l=0; r=maxi; while(r-l>esp) { double mid=(l+r)/2.0; if(is_ok(mid)) r=mid; else l=mid; } printf("%.4lf\n",l); } return 0; }
时间: 2024-09-30 00:28:20