Submission #855549

#TimeUsernameProblemLanguageResultExecution timeMemory
855549ancuber1031Self Study (JOI22_ho_t2)C++14
0 / 100
986 ms10068 KiB
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;

#define int __int128
#define pii pair<int,int>
#define p_q priority_queue
#define endl '\n'
#define pb push_back

long long N, M;
int n, m;
const int one = 1, two = 2, zero = 0;
vector<int> a, b;

bool check(int mid) {
    int rem = n*m;
    for (int i = 0; i < n; ++i) {
        if (a[i] > b[i]) {
            if (a[i]*m >= mid) {
                rem -= mid/a[i]+(mid%a[i] > zero);
            } else {
                int cur = mid-a[i]*m;
                rem -= m;
                rem -= cur/b[i]+(cur%b[i] > zero);
            }
        } else {
            rem -= mid/b[i]+(mid%b[i] > zero);
        }
    }
    return rem >= zero;
}

signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin>>N>>M;
    n = N, m = M;
    a.resize(n), b.resize(n);
    for (auto& i : a) {
        long long x; cin>>x;
        i = x;
    }
    for (auto& i : b) {
        long long x; cin>>x;
        i = x;
    }
    
    int l = zero, r = 2e36;
    while(r-l > one) {
        int mid = (l+r)/two;
        if (check(mid)) l = mid;
        else r = mid;
    }
    long long ans = l;
    cout<<ans<<endl;
    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...