1 solutions

  • 0
    @ 2025-11-27 11:58:50

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    long long n, m, a, b;
    bool check(long long t){
        if ((a + b) * t > n + m)
            return false;
        if (a == b){
            if (a * t <= n && a * t <= m)
                return true;
            else
                return false;
        }
        double low, high;
        if (a > b){
            low = (1.0 * a * t - m) / (a - b);
            high = (1.0 * n - b * t) / (a - b);
        }
        else{
            low = (1.0 * n - b * t) / (a - b);
            high = (1.0 * a * t - m) / (a - b);
        }
        long long L = ceil(low);
        long long R = floor(high);
        L = max(L, (long long)0);
        R = min(R, t);
        return (L <= R);
    }
    int main(){
        cin >> n >> m;
        cin >> a >> b;
        long long ans = 0;
        long long left = 0;
        long long right = max(n, m) / min(a, b) + 1;
        while (left <= right){
            long long mid = (left + right) / 2;
            if (check(mid)){
                ans = mid;
                left = mid + 1;
            }
            else{ 
                right = mid - 1;
            }
        }
        cout << ans;
        return 0;
    }
    
    
    • 1

    Information

    ID
    88
    Time
    400ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By