#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
const long long int iEPS = 1e11;
const double PI = 2 * acos(0.0);
int CASE = 1;
int TEST;
template <typename T>
T ceilling(T a) {
  return ((double)((long long int)a)) == a ? (T)a
                                           : (T)((long long int)(a + 1.0));
}
template <typename T>
T flooring(T a) {
  return (T)((long long int)a);
}
template <typename T>
T pairmin(T a, T b) {
  return (a > b) ? b : a;
}
template <typename T>
T pairmax(T a, T b) {
  return (a > b) ? a : b;
}
template <typename T>
T arrymax(T arr[], int arrsize) {
  T m = arr[0];
  for (int i = 0; i < arrsize; i++) {
    if (arr[i] > m) {
      m = arr[i];
    }
  }
  return m;
}
template <typename T>
T arrymin(T arr[], int arrsize) {
  T m = arr[0];
  for (int i = 0; i < arrsize; i++) {
    if (arr[i] < m) {
      m = arr[i];
    }
  }
  return m;
}
template <typename T>
T GCD(T _a, T _b) {
  T _rem = 0;
  while (_b != 0) {
    _rem = _a % _b;
    _a = _b;
    _b = _rem;
  }
  return _a;
}
template <typename T>
T LCM(T a, T b) {
  return ((a * b) / GCD(a, b));
}
template <typename T>
T ABS(T a) {
  return a < 0 ? (-1 * a) : a;
}
bool IsPrime(long long int a) {
  if (a == 2) return true;
  if (a % 2 == 0) return false;
  long long int sqr = (long long int)(sqrt((double)a));
  long long int i = 0;
  for (i = 3; i <= sqr; i += 2) {
    if (a % i == 0) return false;
  }
  return true;
}
bool Permutation(string &s) {
  int i = 0, j = 0, n = 0;
  n = s.length();
  for (i = 0, j = n - 1; i < n / 2, j >= n / 2; i++, j--) {
    if (s[i] != s[j]) {
      return false;
    }
  }
  return true;
}
struct vpair {
  double a;
  double b;
  vpair(int a, int b) {
    this->a = a;
    this->b = b;
  }
};
bool cmp(vpair &a, vpair &b) {
  if (a.a < b.a)
    return true;
  else if (a.a == b.a) {
    if (a.b < b.b)
      return true;
    else
      return false;
  } else {
    return false;
  }
}
int n = 0, m = 0, c = 0, y = 0, d = 0, i = 0, x = 0, k = 0, j = 0;
double lo = 0, up = 0, mid = 0, timemin = 0, timemax = 0;
double b[100005];
double a[100005];
double ansmin[100005];
double ansmax[100005];
vector<vpair> v;
int main(void) {
  cin >> n;
  for (i = 0; i < n; i++) cin >> a[i];
  for (i = 0; i < n; i++) cin >> b[i];
  for (i = 0; i < n; i++) v.push_back(vpair(a[i], b[i]));
  sort(v.begin(), v.end(), cmp);
  lo = 0.0000001;
  up = 1e9;
  mid = (lo + up) / 2;
  while (lo <= up && x != 1000) {
    timemax = -2e9;
    timemin = 2e9;
    for (i = 0; i < n; i++) {
      timemin = pairmin(timemin, v[i].a + v[i].b * mid);
      timemax = pairmax(timemax, v[i].a - v[i].b * mid);
    }
    if (timemin <= timemax) {
      lo = mid + 0.0000001;
    } else {
      up = mid - 0.0000001;
    }
    mid = (lo + up) / 2;
    x++;
  }
  printf("%.12f\n", mid);
  return 0;
}
