#include <bits/stdc++.h>
using namespace std;
const int N = 105, M = 30005;
long long n, seen[M + M];
long long p[N], q[N], dp[M + M];
int main() {
  cin >> n;
  long long m = 3 * n * n;
  for (long long i = 0; i <= n; i++) {
    double a;
    cin >> a;
    p[i] = (int)(10000000 * a);
  }
  long long lo = 0;
  long long hi = 10000000;
  long long mid = 0;
  long long cur = 0;
  while (lo < hi) {
    mid = (lo + hi) / 2;
    bool ok = false;
    for (long long i = 0; i <= n; i++) {
      q[i] = p[i] - mid;
      if (2 * i - n <= 0 && q[i] >= 0) {
        lo = mid + 1;
        ok = true;
      }
    }
    if (ok) continue;
    cur++;
    for (long long i = 0; i <= n; i++) {
      long long v1 = 2 * i - n;
      long long v2 = q[i];
      assert(v1 + m >= 0 && v1 + m < m + m);
      if (seen[v1 + m] != cur) {
        seen[v1 + m] = cur;
        dp[v1 + m] = v2;
      } else {
        dp[v1 + m] = max(dp[v1 + m], v2);
      }
      if (2 * i - n < 0) {
        for (long long k = m + m - 1; k >= 0; k--) {
          if (seen[k] == cur && k + v1 < m + m && k + v1 >= 0) {
            long long k2 = k + v1;
            if (seen[k2] != cur) {
              seen[k2] = cur;
              dp[k2] = dp[k] + v2;
            } else {
              dp[k2] = max(dp[k2], dp[k] + v2);
            }
          }
        }
      } else {
        for (long long k = 0; k < m + m; k++) {
          if (seen[k] == cur && k + v1 < m + m && k + v1 >= 0) {
            long long k2 = k + v1;
            if (seen[k2] != cur) {
              seen[k2] = cur;
              dp[k2] = dp[k] + v2;
            } else {
              dp[k2] = max(dp[k2], dp[k] + v2);
            }
          }
        }
      }
    }
    if (seen[m] == cur && dp[m] >= 0) {
      ok = true;
    }
    if (ok)
      lo = mid + 1;
    else
      hi = mid;
  }
  double ans = 1.0 * lo * 0.0000001;
  cout << setprecision(8) << fixed;
  cout << ans << "\n";
  return 0;
}
