1 条题解

  • 0
    @ 2025-11-23 21:53:41

    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

    信息

    ID
    5642
    时间
    400ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者