제출 #805370

#제출 시각아이디문제언어결과실행 시간메모리
805370vjudge1Self Study (JOI22_ho_t2)C++17
10 / 100
54 ms11428 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 3e5 + 10;
ll n, m;
ll A[N], B[N];

ll divi(ll a, ll b) {
    return (a + b - 1) / b;
}

bool check(ll x) {
    ll s = 0;
    for(int i = 0; i < n; i++) {
        if(B[i] >= A[i]) {
            s += divi(x, B[i]);
        } else {
            ll t = min(m, divi(x, A[i]));
            s += t + divi(max(x - t * A[i], 0ll), B[i]);
        }
    }
    return (s <= n * m);
}
const ll INF = 1000000000000000000;
ll solve() {
    ll l = 0, r = INF;
    while(r - l > 1) {
        ll mid = (l + r) / 2;
        if(check(mid)) l = mid;
        else r = mid;
    }
    return l;
}

// mt19937 rnd(14941);
// uniform_int_distribution<ll> ui(1, INF);
// void gen() {
//     for(int i = 0; i < n; i++)  
//         A[i] = rnd();
//     for(int i = 0; i < n; i++)  
//         B[i] = rnd();
// }
ll stupid() {
    ll mx = (ll)1e18;
    for(int i = 0; i < n; i++)
        mx = min(mx, max(A[i], B[i]));
    return mx;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin >> n >> m;
    for(int i = 0; i < n; i++) 
        cin >> A[i];
    for(int i = 0; i < n; i++) 
        cin >> B[i];
    cout << stupid();
    // cout << solve();
    // int t = 1000;
    // do {
    //     gen();
    //     t--;
    // }
    // while(stupid() == solve() && t);
    // for(int i = 0; i < n; i++) 
    //     cout << A[i] << ' ';
    // cout << '\n';
    // for(int i = 0; i < n; i++) 
    //     cout << B[i] << ' ';
    // cout << '\n';
    // cout << "slow: " << stupid() << '\n';
    // cout << "fast: " << solve() << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...