Submission #987731

#TimeUsernameProblemLanguageResultExecution timeMemory
987731_callmelucianSelf Study (JOI22_ho_t2)C++14
100 / 100
232 ms13940 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pl;
typedef pair<int,int> pii;
typedef tuple<int,int,int> tt;

#define all(a) a.begin(), a.end()
#define filter(a) a.erase(unique(all(a)), a.end())

const int mn = 3e5 + 5;
ll a[mn], b[mn], cur[mn];
ll n, m;

bool ok (ll lb) {
    ll period = n * m;
    for (int i = 0; i < n; i++) {
        cur[i] = 0;
        if (a[i] < b[i]) continue;
        ll need = min(m, lb / a[i] + (lb % a[i] ? 1 : 0));
        cur[i] = need * a[i], period -= need;
    }
    for (int i = 0; i < n; i++) {
        if (cur[i] >= lb) continue;
        ll need = (lb - cur[i]) / b[i] + ((lb - cur[i]) % b[i] ? 1 : 0);
        if (need > period) return 0;
        period -= need;
    }
    return 1;
}

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

    cin >> n >> m;
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++) cin >> b[i];

    ll ans = 0;
    for (ll i = (1LL << 59); i; i >>= 1)
        if (ok((ans | i))) ans |= i;
    cout << ans;

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