Submission #1181071

#TimeUsernameProblemLanguageResultExecution timeMemory
1181071nekolieSemiexpress (JOI17_semiexpress)C++20
100 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n,m,k; cin >> n >> m >> k;
    long long A, B, C, T, odp = 0;
    cin >> A >> B >> C >> T;
    int s[m];
    for (int i = 0; i < m; i++)
        cin >> s[i];
    priority_queue<tuple<long long,long long,int,int>> q;
    for (int i = 1; i < m; i++) {
        long long d = B*(s[i-1]-1);
        if (d > T)
            continue;
        long long ile = min((T-d)/A + 1, 1ll*(s[i]-s[i-1]));
        odp += ile, d += C*ile;
        if (s[i-1]+ile < 1ll*s[i] && d <= T)
            q.push({min((T-d)/A+1,s[i]-s[i-1]-ile),d,s[i-1]+ile,i});
    }
    for (int i = 0; i < k-m && !q.empty(); i++) {
        long long ile = get<0>(q.top()), d = get<1>(q.top());
        int ind = get<2>(q.top()), j = get<3>(q.top());
        odp += ile, d += C*ile, ind += ile, q.pop();
        if (ind < s[j] && d <= T)
            q.push({min((T-d)/A+1,1ll*(s[j]-ind)),d,ind,j});
    }
    odp--;
    if (B*(s[m-1]-1) <= T)
        odp++;
    cout << odp << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...