#include <bits/stdc++.h>
using namespace std;
struct {
  int v, next;
  double w;
} edge[250 * 250];
int e, ft[250];
int n;
double p[250], dist[250];
bool flag[250];
void add_edge(int u, int v, double w) {
  edge[e].v = v;
  edge[e].w = w;
  edge[e].next = ft[u];
  ft[u] = e++;
}
bool spfa(int u) {
  flag[u] = true;
  for (int i = ft[u]; i != -1; i = edge[i].next) {
    int v = edge[i].v;
    double w = edge[i].w + dist[u];
    if (w > dist[v] + 1e-10) {
      dist[v] = w;
      if (flag[v] || spfa(v)) return true;
    }
  }
  flag[u] = false;
  return false;
}
bool judge(double alpha) {
  e = 0;
  for (int i = 0; i <= n + n; i++) {
    ft[i] = -1;
    dist[i] = 0;
    flag[i] = false;
  }
  for (int i = 0; i <= n + n; i++)
    for (int j = 0; j <= i && j <= n; j++)
      add_edge(i, i + n - j - j, p[j] - alpha);
  for (int i = 0; i <= n + n; i++)
    if (spfa(i)) return true;
  return false;
}
int main() {
  while (cin >> n) {
    for (int i = 0; i <= n; i++) scanf("%lf", p + i);
    double l = 0, r = 1.0;
    for (int i = 0; i < 30; i++) {
      double mid = (l + r) / 2;
      if (judge(mid))
        l = mid;
      else
        r = mid;
    }
    printf("%.10f\n", (l + r) / 2);
  }
  return 0;
}
