#include <bits/stdc++.h>
using namespace std;
int n, vis[305], o[305], cn[305], nxt[500005], head[305];
int to[500005], cnt, m;
double p[305], mid, w[500005], dis[305];
const double eps = 1e-10;
queue<int> q;
void add(int u, int v, double ww) {
  nxt[++cnt] = head[u];
  head[u] = cnt;
  to[cnt] = v;
  w[cnt] = ww;
}
bool spfa(int s) {
  dis[s] = 0;
  while (!q.empty()) q.pop();
  q.push(s);
  vis[s] = 1;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    ++cn[u];
    vis[u] = 1;
    o[u] = 0;
    if (cn[u] == m) return 1;
    for (int i = head[u]; i; i = nxt[i]) {
      int v = to[i];
      if (dis[v] > dis[u] + w[i] + mid) {
        dis[v] = dis[u] + w[i] + mid;
        if (!o[v]) q.push(v), o[v] = 1;
      }
    }
  }
  return 0;
}
bool check() {
  memset(o, 0, sizeof(o));
  memset(vis, 0, sizeof(vis));
  memset(cn, 0, sizeof(cn));
  for (int i = 0; i <= m; i++) dis[i] = 1e15;
  for (int i = 0; i <= m; i++)
    if (!vis[i])
      if (spfa(i)) return 1;
  return 0;
}
int main() {
  cin >> n;
  m = n * 2;
  for (int i = 0; i <= n; i++) scanf("%lf", &p[i]);
  for (int i = 0; i <= m; i++)
    for (int j = 0; j <= n; j++) {
      int k = i + n - j - j;
      if (k > 0 && k <= m) add(i, k, -p[j]);
    }
  double l = 0, r = 1;
  while (r - l > eps) {
    mid = (l + r) * 0.5;
    if (check())
      l = mid;
    else
      r = mid;
  }
  printf("%.10lf\n", l);
  return 0;
}
