#include <bits/stdc++.h>
inline int in() {
  int k = 0;
  char ch = getchar();
  while (ch < '-') ch = getchar();
  while (ch > '-') k = k * 10 + ch - '0', ch = getchar();
  return k;
}
const double eps = 1e-10;
double a[105], mid;
const int N = 10005, M = 50005;
int head[N], to[M], nxt[M], cnt, o[N], n, vis[N], Cnt[N];
double w[M], dis[N];
inline void add(int u, int v, double _w) {
  to[++cnt] = v, w[cnt] = _w, nxt[cnt] = head[u], head[u] = cnt;
}
std::queue<int> Q;
bool spfa(int s) {
  dis[s] = 0;
  while (!Q.empty()) Q.pop();
  Q.push(s);
  o[s] = 1;
  while (!Q.empty()) {
    int u = Q.front();
    Q.pop();
    ++Cnt[u];
    o[u] = 0;
    vis[u] = 1;
    if (Cnt[u] == n * 3) return 1;
    for (int i = head[u]; i; i = nxt[i])
      if (dis[u] + w[i] + mid < dis[to[i]]) {
        dis[to[i]] = dis[u] + w[i] + mid;
        if (!o[to[i]]) Q.push(to[i]), o[to[i]] = 1;
      }
  }
  return 0;
}
bool check() {
  memset(o, 0, sizeof o);
  memset(vis, 0, sizeof vis);
  memset(Cnt, 0, sizeof Cnt);
  for (int i = 1; i <= n * 3; ++i) dis[i] = 1e15;
  for (int i = 1; i <= n * 3; ++i)
    if (!vis[i])
      if (spfa(i)) return 1;
  return 0;
}
int main() {
  n = in();
  for (int i = 0; i <= n; ++i) scanf("%lf", a + i);
  for (int i = 1; i <= n * 3; ++i)
    for (int j = 0; j <= n; ++j)
      if (i + n - j * 2 > 0 && i + n - j * 2 <= n * 3)
        add(i, i + n - j * 2, -a[j]);
  double l = 0, r = 1;
  while (r - l > eps) {
    mid = (l + r) / 2;
    if (check())
      l = mid;
    else
      r = mid;
  }
  printf("%.10lf\n", l);
  return 0;
}
