제출 #1347735

#제출 시각아이디문제언어결과실행 시간메모리
1347735kawhietSemiexpress (JOI17_semiexpress)C++20
100 / 100
8 ms4540 KiB
#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
#include "debug.h"
#else
#define dbg(...) 47
#endif

#define int long long

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m, k;
    cin >> n >> m >> k;
    int a, b, c, t;
    cin >> a >> b >> c >> t;
    vector<int> s(m);
    for (int i = 0; i < m; i++) {
        cin >> s[i];
    }
    k -= m;
    vector<int> x;
    int ans = 0, cur = 0;
    for (int i = 0; i < m - 1; i++) {
        cur = (s[i] - 1) * b;
        if (cur > t) break;
        ans++;
        int cnt = (t - cur) / a;
        int pos = s[i] + cnt;
        if (pos < s[i + 1]) {
            ans += cnt;
        } else {
            ans += s[i + 1] - s[i] - 1;
            continue;
        }
        pos++;
        for (int j = 0; j <= k; j++) {
            int z = cur + (pos - s[i]) * c;
            if (z > t) break;
            cnt = (t - z) / a + 1;
            if (pos + cnt >= s[i + 1]) {
                x.push_back(s[i + 1] - pos);
                break;
            } else {
                x.push_back(cnt);
                pos += cnt;
            }
        }
        if (x.size() >= 1000000) break;
    }
    if ((s[m - 1] - 1) * b <= t) {
        ans++;
    }
    sort(x.rbegin(), x.rend());
    for (int i = 0; i < min((int)x.size(), k); i++) {
        ans += x[i];
    }
    cout << ans - 1 << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...