#include <bits/stdc++.h>
using namespace std;
template <typename T, typename S>
inline bool upmin(T& a, const S& b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T, typename S>
inline bool upmax(T& a, const S& b) {
  return a < b ? a = b, 1 : 0;
}
template <typename N, typename PN>
inline N flo(N a, PN b) {
  return a >= 0 ? a / b : -((-a - 1) / b) - 1;
}
template <typename N, typename PN>
inline N cei(N a, PN b) {
  return a > 0 ? (a - 1) / b + 1 : -(-a / b);
}
template <typename N>
N gcd(N a, N b) {
  return b ? gcd(b, a % b) : a;
}
inline void gn(long long& x) {
  int sg = 1;
  char c;
  while (((c = getchar()) < '0' || c > '9') && c != '-')
    ;
  c == '-' ? (sg = -1, x = 0) : (x = c - '0');
  while ((c = getchar()) >= '0' && c <= '9') x = x * 10 + c - '0';
  x *= sg;
}
inline void gn(int& x) {
  long long t;
  gn(t);
  x = t;
}
inline void gn(unsigned long long& x) {
  long long t;
  gn(t);
  x = t;
}
inline void gn(double& x) {
  double t;
  scanf("%lf", &t);
  x = t;
}
inline void gn(long double& x) {
  double t;
  scanf("%lf", &t);
  x = t;
}
inline long long sqr(long long a) { return a * a; }
inline double sqrf(double a) { return a * a; }
int inf = 0x3f3f3f3f;
double eps = 1e-6;
int mo = 1000000007;
int qp(int a, long long b) {
  int n = 1;
  do {
    if (b & 1) n = 1ll * n * a % mo;
    a = 1ll * a * a % mo;
  } while (b >>= 1);
  return n;
}
int n, k;
int vi[1111111], ci[1111111];
int an[1111111];
int qu1[1111111], q1;
int qu2[1111111], q2;
int get1(int d) {
  if (d == n + 1) return inf;
  int l = 1, r = q1;
  while (l <= r) {
    int mid = l + r >> 1;
    if (qu1[mid] <= d)
      r = mid - 1;
    else
      l = mid + 1;
  }
  return vi[qu1[l]];
}
int get2(int d) {
  if (d == n + 1) return -inf;
  int l = 1, r = q2;
  while (l <= r) {
    int mid = l + r >> 1;
    if (qu2[mid] <= d)
      r = mid - 1;
    else
      l = mid + 1;
  }
  return ci[qu2[l]];
}
int main() {
  gn(n);
  gn(k);
  for (int i = (1), _ed = (n + 1); i < _ed; i++) gn(vi[i]), vi[i] *= 100;
  for (int i = (1), _ed = (n + 1); i < _ed; i++) gn(ci[i]);
  int ptr = n + 1;
  for (int i = n; i >= 1; i--) {
    while (q1 > 0 && vi[i] >= vi[qu1[q1]]) q1--;
    qu1[++q1] = i;
    while (q2 > 0 && ci[i] <= ci[qu2[q2]]) q2--;
    qu2[++q2] = i;
    while (ptr > i) {
      int vi2 = get1(ptr - 1);
      int ci2 = get2(ptr - 1);
      if (vi2 >= ci2)
        ptr--;
      else
        break;
    }
    int x1 = min(get1(ptr), get2(ptr)),
        x2 = ptr == i ? -inf : min(get1(ptr - 1), get2(ptr - 1));
    an[i] = max(x1, x2);
  }
  sort(an + 1, an + 1 + n);
  double prod = k;
  double su = 0.0;
  for (int i = (1), _ed = (n); i < _ed; i++) {
    if (i >= 2) prod *= (n - k - i + 2);
    prod /= (n - i + 1);
    su += an[i] * prod;
  }
  printf("%.10lf\n", su);
  return 0;
}
