二分来感了…… #include <iostream> #include <cmath> #include <iomanip> using namespace std; const double pi=acos(-1.0); const double eps=1e-5; double head,tail,mid; int t,maxx,n,f,a[10010],i; bool can(double x) { int k=0; for (int i=1;i<=n;i++) k+=(int)(a[i]*a[i]*pi/x); if (k>=f) return true; else return false; } int main() { cout << fixed << setprecision(4); cin >> t; while (t--) { cin >> n >> f; f++; maxx=0; for (i=1;i<=n;i++) { cin >> a[i]; if (a[i]>maxx) maxx=a[i]; } head=0;tail=maxx*maxx*pi; while (head + eps <tail) { mid = (head+tail)/2; if (can(mid)) head=mid; else tail = mid-eps; } cout << head << endl; } system("pause"); return 0; }