#include <bits/stdc++.h>
using namespace std;
double chance[2][505];
int used[2][505];
int mid = 251;
int main() {
  int n;
  cin >> n;
  double best = 0.0;
  for (int(i) = 0; (i) < (505); ++(i))
    for (int(j) = 0; (j) < (2); ++(j)) chance[j][i] = 0.0;
  for (int(i) = 0; (i) < (505); ++(i))
    for (int(j) = 0; (j) < (2); ++(j)) used[j][i] = 0;
  for (int(i) = 0; (i) < (n + 1); ++(i)) {
    double bufchance;
    cin >> bufchance;
    int baru = n - i;
    int lama = i;
    if (baru >= lama) best = max((best), (bufchance));
    int untung = baru - lama;
    chance[0][mid + untung] = bufchance;
    used[0][mid + untung] = 1;
  }
  int z = 0;
  for (int(i) = 0; (i) < (50); ++(i)) {
    int y = z ^ 1;
    for (int(j) = 0; (j) < (500); ++(j)) chance[y][j] = 0.0;
    for (int(j) = 0; (j) < (500); ++(j)) used[y][j] = 0;
    for (int(j) = 0; (j) < (500); ++(j))
      if (used[z][j])
        for (int(k) = 0; (k) < (500); ++(k))
          if (used[z][k]) {
            if (j + k - mid < 0 || j + k - mid > 500) continue;
            used[y][j + k - mid] = 1;
            chance[y][j + k - mid] = max((chance[y][j + k - mid]),
                                         (0.5 * (chance[z][j] + chance[z][k])));
          }
    z = y;
  }
  for (int(i) = 0; (i) < (500); ++(i))
    if (i >= mid && used[z][i]) best = max((best), (chance[z][i]));
  printf("%.10lf\n", best);
  return 0;
}
