# https://yukicoder.me/problems/no/3604 def solve(N, cum_a_list, cum_b_list, v): max_r_list = [0.0] * N max_r = -float("inf") for r in reversed(range(N)): x = cum_a_list[r] - v * cum_b_list[r] max_r = max(x, max_r) max_r_list[r] = max_r min_r = 0.0 for k in range(N): if not max_r_list[k] >= min_r: return False x = cum_a_list[k] - v * cum_b_list[k] min_r = min(min_r, x) return True def main(): N = int(input()) A = list(map(int, input().split())) B = list(map(int, input().split())) cum_a_list = [0] * N a = 0 for i in range(N): a += A[i] cum_a_list[i] = a cum_b_list = [0] * N b = 0 for i in range(N): b += B[i] cum_b_list[i] = b low = 0.0 high = float(sum(A)) while high - low > 10 ** (-6): mid = (high + low) / 2.0 if solve(N, cum_a_list, cum_b_list, mid): low = mid else: high = mid print(low) if __name__ == "__main__": main()