// @EXPECTED_RESULTS@: TIME_LIMIT_EXCEEDED,WRONG_ANSWER #include #include #include #include #include #include // accumulate #include using namespace std; typedef long long ll; template ll min_diff(vector::iterator from, vector::iterator to, ll target) { if constexpr(kp == 1) { assert(from != to); vector::iterator it = upper_bound(from, to, target); ll res = (it == to ? LLONG_MAX : *it - target); if (it != from) return min(res, target - *(--it)); else return res; } else { ll res = LLONG_MAX; while (distance(from, to) >= kp) { ll curtarget = target - *from; res = min(res, min_diff(++from, to, curtarget)); } return res; } } long double solve() { ll n, k, xbar; vector::iterator it; cin >> n >> k >> xbar; vector x(n); for (ll &xi : x) cin >> xi; for (ll &xi : x) xi -= xbar; // set xbar = 0 WLOG sort(x.begin(), x.end()); ll s = accumulate(x.begin(), x.end(), 0LL); long double res = (long double)(s) / n; // do not remove anything if (k <= 0) return fabs(res); // O(log n) res = min(res, (long double)min_diff<1>(begin(x), end(x), s) / (n-1)); if (k <= 1) return fabs(res); // O(n log n) res = min(res, (long double)min_diff<2>(begin(x), end(x), s) / (n-2)); if (k <= 2) return fabs(res); // O(n^2 log n) res = min(res, (long double)min_diff<3>(begin(x), end(x), s) / (n-3)); if (k <= 3) return fabs(res); // O(n^3 log n) res = min(res, (long double)min_diff<4>(begin(x), end(x), s) / (n-4)); if (k <= 4) return fabs(res); assert(false); // k >= 5 not supported return fabs(res); } int main() { (cout << fixed).precision(6); cout << solve() << endl; }