Submission #884644

#TimeUsernameProblemLanguageResultExecution timeMemory
884644EJIC_B_KEDAXSelf Study (JOI22_ho_t2)C++17
100 / 100
357 ms13956 KiB
#ifdef LOCAL
    //#define _GLIBCXX_DEBUG
#endif
#include <bits/stdc++.h>
#include <random>

#ifndef LOCAL
    //#pragma GCC optimize("O3")
    //#pragma GCC optimize("Ofast")
    //#pragma GCC optimize("unroll-loops")
    #pragma GCC target("avx,avx2,bmi,bmi2,popcnt,lzcnt")
#endif
using namespace std;
using ll = long long;
using ld = long double;
#define x first
#define y second
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()

mt19937_64 mt(418);

void solve();
void init();

int32_t main() {
#ifndef LOCAL
    cin.tie(nullptr)->sync_with_stdio(false);
#else
    freopen("input.txt", "r", stdin);
#endif
    // srand(time(0));
    init();
    cout << fixed << setprecision(20);
    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }
}

void init() {}

#define int ll

void solve() {
    int n, m;
    cin >> n >> m;
    vector<int> a(n), b(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < n; i++) {
        cin >> b[i];
    }
    ll l = 0, r = 2e18;
    while (r - l > 1) {
        ll mid = (r + l) / 2;
        ll free = (ll)m * n;
        vector<ll> skill(n, 0);
        int ok = 1;
        for (int i = 0; i < n; i++) {
            if (a[i] > b[i]) {
                ll have = (mid + a[i] - 1) / a[i];
                have = min(have, (ll)m);
                skill[i] += a[i] * have;
                free -= have;
            }
        }
        for (int i = 0; i < n; i++) {
            if (free < 0) {
                ok = 0;
            }
            ll need = mid - skill[i];
            if (need > 0) {
                ll have = (need + b[i] - 1) / b[i];
                skill[i] += b[i] * have;
                free -= have;
            }
        }
        if (free >= 0 && ok) {
            l = mid;
        } else {
            r = mid;
        }
        // cout << "!!! " << r << ' ' << l << '\n';
    }
    cout << l << '\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...