Підписки#12285

Підписки (Розбір)

Автор задачі:

Андрій Холод (Connect)

Підготовлено:

Андрій Холод (Connect)

Розбір:

Андрій Холод (Connect)

Рішення

Помітимо, що оскільки перша підписка може бути на будь яку кількість хвилин то нам завжди вигідно купувати її останьо. Тоді нам залишається перебрати усі варіанти купівлі 2, 3 та 4 підписок та час який буде залишатись закривати першою підпискою

Асимптотика рішення O(1).

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define speed ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define endl '\n'

void solve() {
    ll x1 , x2 , x3 , x4;

    cin>>x1>>x2>>x3>>x4;

    ll t2 , t3 , t4;

    cin>>t2>>t3>>t4;

    ll q;

    cin>>q;

    //use only 1;

    ll res = q*x1;

    //use 2;

    ll curr = 0;

    curr+=x2;
    curr+=x1*max(0LL ,(q - t2));
    res = min(curr , res);

    // use 3;
    curr = 0;

    curr+=x3;
    curr+=x1*max(0LL ,(q - t3));
    res = min(curr , res);

    // use 4;
    curr = 0;

    curr+=x4;
    curr+=x1*max(0LL ,(q - t4));
    res = min(curr , res);

    // use 2 , 3;
    curr = 0;

    curr+=x2+x3;
    curr+=x1*max(0LL ,(q - t2 - t3));
    res = min(curr , res);

    // used 2 , 4;
    curr = 0;
        
    curr+=x2+x4;
    curr+=x1*max(0LL ,(q - t2 - t4));
    res = min(curr , res);

    // use 3 , 4;
    curr = 0;

    curr+=x3+x4;
    curr+=x1*max(0LL ,(q - t3 - t4));
    res = min(curr , res);

    // use 2 , 3 , 4;
    curr = 0;

    curr+=x2+x3+x4;
    curr+=x1*max(0LL ,(q - t2 - t3 - t4));
    res = min(curr , res);

    cout<<res<<endl;
    

}  

signed main() {
    speed;
    solve();
    return 0;
}