#include <bits/stdc++.h>
const int N = 1e6 + 69;
int C[N];
int M[N];
std::vector<int> R;
void rozpierdol(int n, int k) {
  std::sort(R.begin(), R.end());
  double res = 0, cur = (double)k / (double)n;
  for (int i = 0; i <= n - k; i++) {
    res += R[i] * cur;
    cur = cur / (n - i - 1.0L) * (n - i - k);
  }
  printf("%.9lf\n", res);
}
void Solve(int n, int k) {
  R.reserve(n);
  for (int i = 0; i < n; i++) scanf("%d", C + i), C[i] *= 100;
  for (int i = 0; i < n; i++) scanf("%d", M + i);
  int right = INT_MIN;
  std::deque<int> min, max;
  for (int i = 0; i < n; i++) {
    while (min.size() && min.back() < i) min.pop_back();
    while (max.size() && max.back() < i) max.pop_back();
    if (right < i) {
      right = i;
      min.push_front(i);
      max.push_front(i);
    }
    while (right < n - 1 && std::min(M[min.back()], M[right + 1]) >=
                                std::max(C[max.back()], C[right + 1])) {
      right++;
      while (min.size() && M[min.front()] >= M[right]) min.pop_front();
      while (max.size() && C[max.front()] <= C[right]) max.pop_front();
      min.push_front(right);
      max.push_front(right);
    }
    R.push_back(std::max(std::min(std::min(M[min.back()], M[right + 1]),
                                  std::max(C[max.back()], C[right + 1])),
                         std::min(C[max.back()], M[min.back()])));
  }
  rozpierdol(n, k);
}
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  Solve(n, k);
  return 0;
}
