func_code_string: #include <bits/stdc++.h>   using namespace std;   inline char gc() {     static char buf[100000], *p1 = buf, *p2 = buf;     return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)                ? EOF                : *p1++;   }   inline long long read() {     long long x = 0;     char ch = getchar();     bool positive = 1;     for (; !isdigit(ch); ch = getchar())       if (ch ==  - ) positive = 0;     for (; isdigit(ch); ch = getchar()) x = x * 10 + ch -  0 ;     return positive ? x : -x;   }   inline void write(long long a) {     if (a < 0) {       a = -a;       putchar( - );     }     if (a >= 10) write(a / 10);     putchar( 0  + a % 10);   }   inline void writeln(long long a) {     write(a);     puts(  );   }   inline void wri(long long a) {     write(a);     putchar(   );   }   inline unsigned long long rnd() {     return ((unsigned long long)rand() << 30 ^ rand()) << 4 | rand() % 4;   }   const int N = 150005;   long double l[N], r[N];   struct data {     long long p, t, id;   } a[N], b[N];   int n;   long long T;   bool cmp(data a, data b) { return a.p < b.p; }   bool cmpt(data a, data b) {     long long A = (long long)a.t * b.p, B = (long long)b.t * a.p;     return A == B ? a.p < b.p : A < B;   }   bool check(long double c) {     long long sum = 0;     for (int i = 1, j; i <= n; i = j) {       j = i + 1;       while (j <= n && a[j].t * a[i].p == a[i].t * a[j].p) j++;       for (int k = (int)(i); k <= (int)(j - 1); k++)         r[a[k].id] = (1 - c * (sum + a[k].t) / T) * a[k].p;       for (int k = (int)(i); k <= (int)(j - 1); k++) sum += a[k].t;       for (int k = (int)(i); k <= (int)(j - 1); k++)         l[a[k].id] = (1 - c * sum / T) * a[k].p;     }     int dq = n;     long double mn = 1e100;     for (int i = (int)(n); i >= (int)(1); i--) {       while (b[dq].p > b[i].p) {         mn = min(mn, l[b[dq--].id]);       }       if (mn <= r[b[i].id]) return 0;     }     return 1;   }   int main() {     n = read();     for (int i = (int)(1); i <= (int)(n); i++) a[a[i].id = i].p = read();     for (int i = (int)(1); i <= (int)(n); i++) T += (a[i].t = read());     for (int i = (int)(1); i <= (int)(n); i++) b[i] = a[i];     sort(a + 1, a + n + 1, cmpt);     sort(b + 1, b + n + 1, cmp);     long double l = 0, r = 1;     for (int i = (int)(1); i <= (int)(80); i++) {       long double mid = (l + r) / 2;       if (check(mid))         l = mid;       else         r = mid;     }     printf( %.10f , (double)l);   }   