#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion static T[] Range(int n, Func F) => Enumerable.Range(0, n).Select(_ => F()).ToArray(); var n = I(); var az = Range(n, I); var bz = Range(n, I); var saz = new long[n + 1]; var sbz = new long[n + 1]; for (var i = 0; i < n; i++) { saz[i + 1] = saz[i] + az[i]; sbz[i + 1] = sbz[i] + bz[i]; } double pass = 1L << 60; double fail = -pass; for (var lp = 0; lp < 100; lp++) { var mid = (pass + fail) / 2; var lz = new double[n + 1]; var rz = new double[n + 1]; rz[n] = saz[n] - sbz[n] * mid; for (var i = 1; i <= n; i++) { var f = saz[i] - sbz[i] * mid; lz[i] = Math.Min(lz[i - 1], f); } for (var i = n - 1; i >= 0; i--) { var f = saz[i] - sbz[i] * mid; rz[i] = Math.Max(rz[i + 1], f); } bool F() { for (var k = 0; k <= n; k++) if (lz[k] >= rz[k]) return true; return false; } if (F()) pass = mid; else fail = mid; } var ans = pass.ToString("F8"); Console.WriteLine(ans);