#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
template <class T>
T gcd(T a, T b) {
  return a ? gcd(b % a, a) : b;
}
template <class T>
T sqr(T a) {
  return a * a;
}
template <class T>
T sgn(T a) {
  return a > 0 ? 1 : (a < 0 ? -1 : 0);
}
int n;
int m;
int k;
const int N = 1000000;
int v[N], c[N], w[N];
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; i++) scanf("%d", &v[i]), v[i] *= 100;
  for (int i = 0; i < n; i++) scanf("%d", &c[i]);
  multiset<int> b;
  multiset<int, greater<int>> a;
  int j = n - 1;
  for (int i = n - 1; i >= 0; i--) {
    a.insert(v[i]);
    b.insert(c[i]);
    int res = min(*a.begin(), *b.begin());
    while (j >= i) {
      res = max(res, min(*a.begin(), *b.begin()));
      if (*a.begin() <= *b.begin() || j == i) break;
      a.erase(a.find(v[j])), b.erase(b.find(c[j]));
      if (res > min(*a.begin(), *b.begin())) {
        a.insert(v[j]), b.insert(c[j]);
        break;
      } else
        j--;
    }
    w[i] = res;
  }
  sort(w, w + n);
  long double res = (long double)k / n, ans = 0;
  for (int i = 0; i <= n - k; i++) {
    ans += w[i] * res;
    res = (res * max(n - k - i, 1)) / max(n - i - 1, 1);
  }
  printf("%0.20lf", (double)ans);
  return 0;
}
