//#define _GLIBCXX_DEBUG #include using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define all(v) v.begin(), v.end() #define vin(vec, n) rep (i, n) cin >> vec[i]; using ll = long long; using vi = vector; using vvi = vector>; using vc = vector; using vvc = vector>; using pii = pair; const ll MOD = 998244353, MOD2 = 1000000007; /************************************************************************************/ int main() { int N; cin >> N; vi A(N), B(N); vin(A, N); vin(B, N); double ok = 0.0, ng = 1000000001.0; while (abs(ok-ng) > 1e-7) { double x = (ok+ng)/2.0; vector L(N), R(N); L[0] = 0.0; for (int i = 0; i < N-1; ++i) L[i+1] = max(0.0, L[i]+(A[i]-x*B[i])); R[N-1] = 0.0; for (int i = N-2; 0 <= i; --i) R[i] = max(0.0, R[i+1]+(A[i+1]-x*B[i+1])); bool flag = true; for (int k = 0; k < N; ++k) { if (L[k]+R[k]+A[k]-x*B[k] < 0) { flag = false; break; } } if (flag) ok = x; else ng = x; } cout << fixed << setprecision(10) << ok << '\n'; }