Submission #1257455

#TimeUsernameProblemLanguageResultExecution timeMemory
1257455tvgkSemiexpress (JOI17_semiexpress)C++20
18 / 100
1 ms780 KiB
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 3e3 + 7;

int n, m, k;
ll local, ex, semi, cost[mxN], mx;
ii a[mxN];
priority_queue<ii, vector<ii>, greater<ii>> pq;

void Add(int j)
{
    ll tmp = cost[j] + (a[j].se - a[j].fi) * semi;

    if (tmp > mx || a[j].se == a[j + 1].fi)
        return;

    pq.push({min(a[j + 1].fi - a[j].se, (mx - tmp) / local + 1), j});
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    //freopen(task".INP", "r", stdin);
    //freopen(task".OUT", "w", stdout);

    cin >> n >> m >> k;
    cin >> local >> ex >> semi;
    cin >> mx;
    k -= m;

    for (int i = 1; i <= m; i++)
        cin >> a[i].fi;
    a[m + 1].fi = n + 1;

    a[0].se = 1;
    int ans = 0;
    for (int i = 1; i <= m; i++)
    {
        cost[i] = (a[i].fi - 1) * ex;
        a[i].se = a[i].fi;
        if (cost[i] <= mx)
            a[i].se = min(a[i + 1].fi, a[i].fi + (mx - cost[i]) / local + 1);

        ans += a[i].se - a[i].fi;
    }

    for (int i = 1; i <= m; i++)
        Add(i);

    while (pq.size() && k)
    {
        ii j = pq.top();
        pq.pop();
        k--;

        ans += j.fi;
        a[j.se].se += j.fi;
        Add(j.se);
    }
    cout << ans - 1;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...