#include #include using namespace std; using mint = atcoder::modint1000000007; using ll = long long; bool compare_Q(tuple A, tuple B){ return {get<0>(A) * get<1>(B) < get<1>(A) * get<0>(B)}; } int main(){ ll N; cin >> N; vector A(N),B(N); for(ll i = 0; i < N; i++) cin >> A[i]; for(ll i = 0; i < N; i++) cin >> B[i]; ll cnt = 0; vector> C; for(ll i = 0; i < N; i++){ if(A[i] == 0) continue; if(A[i] <= -1){A[i] *= -1; B[i] *= -1;} cnt += A[i]; C.push_back({B[i], A[i], A[i]}); } sort(C.begin(),C.end(),compare_Q); ll sum = 0, idx = 0; mint answer = 0; while(sum <= (cnt - 1) / 2){ sum += get<2>(C[idx]); answer = get<0>(C[idx]); answer /= get<1>(C[idx]); idx++; } cout << answer.val() << "\n"; }