Submission #1126780

#TimeUsernameProblemLanguageResultExecution timeMemory
1126780nguyentunglamSelf Study (JOI22_ho_t2)C++20
100 / 100
233 ms4936 KiB
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;

namespace std {

template <int D, typename T>
struct Vec : public vector<Vec<D - 1, T>> {
    static_assert(D >= 1);
    template <typename... Args>
    Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
};

template <typename T>
struct Vec<1, T> : public vector<T> {
    Vec(int n = 0, T val = T()) : std::vector<T>(n, val) {}
};

template <class Fun>
class y_combinator_result {
    Fun fun_;

   public:
    template <class T>
    explicit y_combinator_result(T &&fun) : fun_(std::forward<T>(fun)) {}

    template <class... Args>
    decltype(auto) operator()(Args &&...args) {
        return fun_(std::ref(*this), std::forward<Args>(args)...);
    }
};

template <class Fun>
decltype(auto) y_combinator(Fun &&fun) {
    return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun));
}

}  // namespace std

#define int long long

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];

    for (int i = 0; i < n; i++) {
        a[i] = max(a[i], b[i]);
    }

    long long l = 0, r = 1e18, ans = -1;

    while (l <= r) {
        long long mid = l + r >> 1;
        long long cur = 0;
        for (int i = 0; i < n; i++) {
            long long tmp = 1LL * a[i] * m;
            if (tmp >= mid) {
                cur += (tmp - mid) / a[i];
            } else {
                cur -= (mid - tmp + b[i] - 1) / b[i];
            }
            cur = max(cur, (long long) -1e18);
        }
        if (cur >= 0) {
            ans = mid;
            l = mid + 1;
        } else r = mid - 1;
    }

    assert(ans != -1);
    cout << ans;
}

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int t = 1; 
    // cin >> t; 

    while (t--) {
        solve();
    }
}
#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...