#include <bits/stdc++.h>
using namespace std;
const int N = 205;
const double INF = 1e18;
const double eps = 1e-8;
int n;
double P[N];
int MAX;
struct matrix {
  double a[N][N];
  inline double* operator[](int x) { return a[x]; }
  void clear() { memset(a, 0, sizeof(a)); }
  inline void fill(double X) {
    for (int i = 0; i <= MAX; ++i)
      for (int j = 0; j <= MAX; ++j) a[i][j] = X;
  }
} S, T;
int main() {
  scanf("%d", &n);
  for (int i = 0; i <= n; ++i) scanf("%lf", &P[i]);
  if (P[n] == 0) return puts("0"), 0;
  MAX = (n << 1);
  for (int i = 1; i <= MAX; ++i) S[0][i] = -INF;
  S[0][0] = 0;
  T.fill(-INF);
  for (int i = 0; i <= MAX; ++i) {
    int ED = min(n, i);
    for (int k = 0; k <= ED; ++k) {
      int nt = i + n - (k << 1);
      if (nt >= 0 && nt <= MAX) T[i][nt] = max(T[i][nt], P[k]);
    }
  }
  unsigned long long now = 0;
  unsigned long long D = 1;
  int cnt = 0;
  while (cnt <= 25) {
    matrix c = S;
    now += D;
    ++cnt;
    for (int j = 0; j <= MAX; ++j)
      for (int k = 0; k <= MAX; ++k) S[0][j] = max(S[0][j], c[0][k] + T[k][j]);
    c = T;
    D <<= 1;
    for (int i = 0; i <= MAX; ++i)
      for (int j = 0; j <= MAX; ++j)
        for (int k = 0; k <= MAX; ++k)
          T[i][j] = max(T[i][j], c[i][k] + c[k][j]);
  }
  double ans = 0;
  for (int i = 0; i <= MAX; ++i) ans = max(ans, S[0][i] / (double)(now));
  printf("%.8lf\n", ans);
}
