#include <bits/stdc++.h>
using namespace std;
int n, cur, pre, m, cnt;
double inf, p[205], ans, tim;
struct matrix {
  double a[205][205];
  void init() { memset(a, 0xc2, sizeof(a)); }
  double* operator[](int x) { return a[x]; }
  matrix operator*(matrix x) {
    matrix y;
    y.init();
    for (int i = 1; i <= m; i++)
      for (int j = 1; j <= m; j++)
        for (int k = 1; k <= m; k++)
          if (a[i][k] != inf && x[k][j] != inf)
            y[i][j] = max(y[i][j], a[i][k] + x[k][j]);
    return y;
  }
} mat[35], f;
int main() {
  cin >> n;
  m = n << 1;
  for (int i = 0; i <= n; i++) scanf("%lf", &p[i]);
  for (int i = 0; i <= 30; i++) mat[i].init();
  f.init();
  inf = f[0][0];
  f[0][0] = 0;
  for (int i = 0; i <= m; i++)
    for (int j = 0; j <= n; j++) {
      int k = i + n - j - j;
      if (i - j >= 0 && k >= 0 && k <= m)
        mat[0][i][k] = max(mat[0][i][k], p[j]);
    }
  cnt = 1;
  pre = 1;
  for (int c = 1; cnt <= 30; c <<= 1, cnt++) {
    for (int i = 0; i <= m; i++)
      if (f[cur][i] != inf) {
        for (int j = 0; j <= m; j++)
          if (mat[cnt - 1][i][j] != inf)
            f[pre][j] = max(f[pre][j], f[cur][i] + mat[cnt - 1][i][j]);
        f[cur][i] = inf;
      }
    tim += c;
    mat[cnt] = mat[cnt - 1] * mat[cnt - 1];
    swap(cur, pre);
    for (int i = 0; i <= m; i++) ans = max(ans, f[cur][i] / tim);
  }
  printf("%.10lf\n", ans);
  return 0;
}
