1 条题解

  • 0
    @ 2024-8-28 9:30:46

    我们将要买的 nn 斤土豆分成两个部分,购买 (m+1)(m+1) 次的部分 qq ,和剩下的部分 rr 。 因为在第一天每买 mm 斤土豆送 11 斤,相当于买了 (m+1)(m+1) 斤,我们可以推出如下公式:

    n=q×(m+1)+rn=q\times (m+1)+r

    qq 代表购买次数,也就是 n/(m+1)n / (m + 1),此时第一天买的花销是 q×a×mq\times a\times m,第二天的花销是 q×b×(m+1)q\times b\times(m+1)rr 代表剩余需要买的土豆,也就是 nq×(m+1)n-q\times(m+1) ,花销就是 r×ar\times a 或者 r×br\times b。 简单来说就是,购买 (m+1)(m+1) 次的部分选择便宜的那一天,剩下的部分也选择较便宜的一天,我们可以推出最后的公式:

    $q\times min(a\times m,b\times(m+1))+r\times min(a,b)$

    时间复杂度 O(1)\text{O(1)}

    #include <bits/stdc++.h>
    
    #define vi vector<int>
    #define vpi vector<pair<int, int>>
    
    using namespace std;
    
    using ll = long long;
    
    constexpr int N = 110;
        
    void solve()
    {
        ll a, b;
        ll n, m;
        cin >> a >> b;
        cin >> n >> m;
    
        ll q = n / (m + 1);
        ll r = n - 1ll * q * (m + 1);
    
        cout << q * min(a * m, b * (m + 1)) + r * min(a, b) << endl;
    }   
    
    signed main()
    {
        int T = 1;
        cin >> T;
        while(T --) solve();
    }

    信息

    ID
    94
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    22
    已通过
    7
    上传者