初级题目就是水啊。。这个水二分~
#include <iostream> #include <iomanip> #include <math.h> using namespace std; #define eps 1e-6 #define pi acos(-1.0) int main() { int t; cin >> t; while (t--) { int n, f; cin >> n >> f; f++; double maxsize = 0.0; double v[10005]; memset(v, 0, sizeof(v)); for (int i = 0; i < n; i++) { double temp; cin >> temp; v[i] = temp * temp; if (temp * temp > maxsize) maxsize = temp * temp; } double low = 0.0, high = maxsize; double mid; while (low + eps < high) { mid = (low + high) / 2; int ff = 0; for (int i = 0; i < n; i++) { ff += (int) (v[i] / mid); } if (ff < f) high = mid; else low = mid; } cout << fixed << setprecision(4) << mid*pi << endl; } } |