Автор задачі: | Андрій Холод (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;
}