#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using db = long double;
const int maxn = 211111;
int n, m;
ll s[maxn];
db calc(int l, int r) {
assert(1 <= l && l <= r && r <= n);
return sqrt(1. * (r - l + 1) * (s[r] - s[l - 1]));
}
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
sort(s + 1, s + n + 1);
for (int i = 1; i <= n; i++) {
s[i] += s[i - 1];
}
db l = -1e8, r = 0;
int timer = 50;
vector<db> dp(n + 1);
vector<int> dpt(n + 1);
while(timre--) {
db mid = (l + r) * 0.5;
static int q[maxn], lim[maxn];
int h = 1, t = 1;
q[1] = 0;
for (int i = 1; i <= n; i++) {
// cerr << i << " adso\n";
while (h + 1 <= t) {
if (dp[q[h]] + calc(q[h] + 1, i) >= dp[q[h + 1]] + calc(q[h + 1] + 1, i)) {
h++;
} else
break;
}
// cerr << i << " upd " << q[h] << " cur mid is " << mid << " \n";
dp[i] = dp[q[h]] + calc(q[h] + 1, i) - mid;
dpt[i] = dpt[q[h]] + 1;
int Ans;
while (h + 1 <= t) {
// cerr << "jjjj\n";
int L = i + 1, R = n;
Ans = n + 1;
while (L <= R) {
// cerr << "wtf\n";
int MID = (L + R) >> 1;
if (dp[q[t]] + calc(q[t] + 1, MID) <= dp[i] + calc(i + 1, MID)) {
L = MID + 1;
} else {
Ans = MID;
R = MID - 1;
}
}
if (Ans <= lim[t])
t--;
else
break;
}
{
int L = i + 1, R = n;
Ans = n + 1;
while (L <= R) {
// cerr << "wtf\n";
int MID = (L + R) >> 1;
if (dp[q[t]] + calc(q[t] + 1, MID) <= dp[i] + calc(i + 1, MID)) {
L = MID + 1;
} else {
Ans = MID;
R = MID - 1;
}
}
}
++t;
lim[t] = Ans;
q[t] = i;
}
if (dpt[n] < m)
l = mid;
else
r = mid;
}
// cerr << dpt[n] << "\n
cout << fixed << setprecision(20) << (long double)(dp[n] + m * l )<< "\n";
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}