Submission #828162

#TimeUsernameProblemLanguageResultExecution timeMemory
828162RaresFelixSelf Study (JOI22_ho_t2)C++17
0 / 100
524 ms4976 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
const int MN = 300001;
const ll INF = 1e18 + 71;

ll n, m, A[MN], B[MN];

bool ok(ll val) {
    if(!val) return 1;
    ll nr_sar = 0;
    for(int i = 1; i <= n; ++i) {
        if((val - 1) / A[i] + 1 <= m) {
            nr_sar += m - ((val - 1) / A[i] + 1);
        } else {
            nr_sar -= (val - m * A[i] - 1) / B[i] + 1;
        }
    }
    return (nr_sar >= 0);
}

int main() {
    cin >> n >> m;
    for(int i = 1; i <= n; ++i) cin >> A[i];
    for(int i = 1; i <= n; ++i) {
        cin >> B[i];
        if(A[i] < B[i]) A[i] = B[i];
    }
    ll st = 0, dr = INF, mij;
    while(st < dr) {
        mij = st + (dr - st + 1) / 2;
        if(ok(mij)) {
            st = mij;
        }  else dr = mij - 1;
    }
    ll mini = INF;
    for(int i = 1; i <= n; ++i) mini = min(A[i], mini);
    assert(ok(st));
    cout << st << "\n";
    return 0;
}
#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...