#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
int n, k;
int v[N], c[N], p[N];
double f[N];
double C(int n, int m) { return f[n] - f[m] - f[n - m]; }
struct Node {
  int Max, Min;
} node[N * 4];
void pushup(int x) {
  node[x].Max = max(node[((x << 1) + 1)].Max, node[((x << 1) + 2)].Max);
  node[x].Min = min(node[((x << 1) + 1)].Min, node[((x << 1) + 2)].Min);
}
void build(int l, int r, int x = 0) {
  if (l == r) {
    node[x].Max = v[l];
    node[x].Min = c[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(l, mid, ((x << 1) + 1));
  build(mid + 1, r, ((x << 1) + 2));
  pushup(x);
}
int Max1, Min1;
void rmq(int l, int r, int L = 1, int R = n, int x = 0) {
  if (L >= l && R <= r) {
    Max1 = max(Max1, node[x].Max);
    Min1 = min(Min1, node[x].Min);
    return;
  }
  int mid = (L + R) >> 1;
  if (l <= mid) rmq(l, r, L, mid, ((x << 1) + 1));
  if (r > mid) rmq(l, r, mid + 1, R, ((x << 1) + 2));
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &v[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &c[i]);
  p[n] = min(v[n] * 100, c[n]);
  int pre = n;
  int Max = v[n], Min = c[n];
  for (int i = n - 1; i >= 1; i--) {
    Max = max(Max, v[i]);
    Min = min(Min, c[i]);
    if (min(Max * 100, Min) <= min(v[i] * 100, c[i])) Max = v[i], Min = c[i];
    p[i] = min(Max * 100, Min);
  }
  sort(p + 1, p + 1 + n);
  for (int i = 1; i <= n; i++) f[i] = f[i - 1] + log(i * 1.0);
  double ans = 0;
  for (int i = 1; i <= n; i++) {
    if (k - 1 > n - i) break;
    ans += exp(log(p[i] * 1.0) + C(n - i, k - 1) - C(n, k));
  }
  printf("%.12f\n", ans);
  return 0;
}
