제출 #862005

#제출 시각아이디문제언어결과실행 시간메모리
862005keaucucalSelf Study (JOI22_ho_t2)C++14
100 / 100
204 ms9172 KiB
#include <iostream>
#include <vector>
using namespace std;

using ll = long long;
const ll MAX_NUM = 1e9 * 1e9;

ll N, M;
vector<int> a;
vector<int> b;

inline bool ifEnoughCourses(const ll passline, ll courses) {
    for(int i = 0; i < N; i++) {
        if(b[i] >= a[i]) {
            courses -= (passline + b[i] - 1) / b[i];
        } else {
            if((passline + a[i] - 1) / a[i] <= M) {
                courses -= (passline + a[i] - 1) / a[i];
            } else {
                courses -= M + ((passline - M * a[i]) + b[i] - 1) / b[i];
            }
        }

        if(courses < 0) return false;
    }

    return true;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> N >> M;
    ll courses = N * M;
    a.resize(N);
    b.resize(N);
    for(int &i : a) cin >> i;
    for(int &i : b) cin >> i;

    ll l = 1, r = MAX_NUM;
    while(l < r) {
        ll mid = (l + r) / 2 + 1;

        if(ifEnoughCourses(mid, courses)) l = mid;
        else r = mid - 1;
    }

    cout << l << '\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...