Submission #861826

#TimeUsernameProblemLanguageResultExecution timeMemory
861826keaucucalSelf Study (JOI22_ho_t2)C++14
62 / 100
1031 ms2652 KiB
// oj.uz SELF STUDY (JOI22_HO_T2)
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

using ll = long long;
const ll MAX_NUM = 1e9 * 1e9; // Ai or Bi * M

int N, M;
vector<pair<int, int>> vec;

bool ifFail(const ll passline, ll t) {
    ll comprehension = 0;
    int cnt_course = 0;
    int cnt = M;

    while(t--) {
        if(comprehension < passline) {
            if(vec[cnt_course].first > vec[cnt_course].second && cnt > 0) {
                comprehension += vec[cnt_course].first;
                cnt--;
            } else comprehension += vec[cnt_course].second;

            if(comprehension >= passline) {
                // cout << comprehension << '\n';
                cnt_course++;
                comprehension = 0;
                cnt = M;
            }
        }
    }
    // cout << passline << ' ' << cnt_course << '\n';
    return cnt_course < N;
}

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

    cin >> N >> M;
    int t = N * M;
    vec.resize(N);
    for(auto &i : vec) cin >> i.first;
    for(auto &i : vec) cin >> i.second;

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

        if(ifFail(mid, t)) {
            r = mid - 1;
        }
        else {
            l = mid;
        }
    }

    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...