#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* #include using namespace boost::multiprecision; */ using namespace std; using ll = long long; using ull = unsigned long long; #define REP(i,a,b) for(ll i = a; i < b; ++i) #define PRI(s) std::cout << s << endl #define PRIF(v, n) printf("%."#n"f\n", (double)v) templatevoid mins(A& a, const B& b) { a = min(a, (A)b); }; templatevoid maxs(A& a, const B& b) { a = max(a, (A)b); }; int main() { ll N; cin >> N; vector A(N); REP(i, 0, N) cin >> A[i]; vector B(N); REP(i, 0, N) cin >> B[i]; ll ans = 1e18; REP(s, 0, N) { auto cmp = [](auto a, auto b) { if (a.first == b.first) return a.second > b.second; return a.first > b.first; }; priority_queue, vector< pair>, decltype(cmp)> q{ cmp }; REP(i, 0, N) q.push({ A[i], 0 }); REP(i, 0, N) { ll ind = (i + s) % N; auto p = q.top(); q.pop(); p.first += B[ind] / 2; p.second++; q.push(p); } ll tmp = 0; while (!q.empty()) maxs(tmp, q.top().second), q.pop(); mins(ans, tmp); } PRI(ans); return 0; }