Submission #811001

#TimeUsernameProblemLanguageResultExecution timeMemory
811001tkwiatkowskiSelf Study (JOI22_ho_t2)C++17
100 / 100
322 ms9168 KiB
#include <iostream>
#include <vector>
using namespace std;

bool check(long long min_lvl, int m, vector<int> &A, vector<int> &B) {
    long long cnt = 0;
    int n = A.size();
    for (int i = 0; i < n; ++i) {
        int a = max(A[i], B[i]);
        int b = B[i];
        long long curr_cnt = min((long long)m, (min_lvl + a - 1) / a);
        cnt += curr_cnt + max((long long)0, (min_lvl - curr_cnt * a + b - 1) / b);
        if (cnt > (long long)n * m)
            return false;
    }
    return true;
}

long long BS(int m, vector<int> &A, vector<int> &B) {
    long long lo = 0, hi = 1e18;
    while (lo < hi) {
        long long mid = (lo + hi + 1) / 2;
        if (check(mid, m, A, B))
            lo = mid;
        else
            hi = mid - 1;
    }
    return lo;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    int n, m;
    cin >> n >> m;
    vector<int> A(n), B(n);
    for (auto &a : A)
        cin >> a;
    for (auto &b : B)
        cin >> b;

    cout << BS(m, A, B) << '\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...