#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
int n, k;
int v[MAXN], c[MAXN], a[MAXN];
double f[MAXN];
int rv[MAXN][20], rc[MAXN][20];
inline int GetV(int l, int r) {
  int x = log2(r - l + 1);
  return max(rv[l][x], rv[r + 1 - (1 << x)][x]);
}
inline int GetC(int l, int r) {
  int x = log2(r - l + 1);
  return min(rc[l][x], rc[r + 1 - (1 << x)][x]);
}
inline int Cal(int pos) {
  if (100 * v[pos] > c[pos]) return c[pos];
  int left = pos, right = n, t;
  while (left <= right) {
    int mid = (left + right) >> 1;
    if (GetV(pos, mid) * 100 <= GetC(pos, mid)) {
      t = mid;
      left = mid + 1;
    } else
      right = mid - 1;
  }
  int ans = GetV(pos, t) * 100;
  if (t < n) ans = max(ans, GetC(pos, t + 1));
  return ans;
}
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]);
  for (int i = 1; i <= n; ++i) rv[i][0] = v[i], rc[i][0] = c[i];
  int lgn = log2(n);
  for (int j = 1; j <= lgn; ++j) {
    int last = n + 1 - (1 << j);
    for (int i = 1; i <= last; ++i) {
      rv[i][j] = max(rv[i][j - 1], rv[i + (1 << (j - 1))][j - 1]);
      rc[i][j] = min(rc[i][j - 1], rc[i + (1 << (j - 1))][j - 1]);
    }
  }
  for (int i = 1; i <= n; ++i) a[i] = Cal(i);
  f[0] = 1.0 * k / (n - k + 1);
  for (int i = 1; i <= n - k + 1; ++i)
    f[i] = f[i - 1] * (n - i - k + 2) / (n - i + 1);
  sort(a + 1, a + n + 1);
  double ans = 0;
  for (int i = 1; i <= n - k + 1; ++i) ans += a[i] * f[i];
  cout << fixed << setprecision(9) << ans << endl;
  return 0;
}
