Submission #1149801

#TimeUsernameProblemLanguageResultExecution timeMemory
1149801fryingducSemiexpress (JOI17_semiexpress)C++20
100 / 100
12 ms22852 KiB
#include "bits/stdc++.h" using namespace std; #ifdef duc_debug #include "bits/debug.h" #else #define debug(...) #endif const int maxn = 3005; int n, m, k, s[maxn]; int a, b, c; long long t; int f[maxn][maxn]; int opt[maxn][maxn]; int id[maxn]; void solve() { cin >> n >> m >> k >> a >> b >> c >> t; k -= m; for (int i = 1; i <= m; ++i) { cin >> s[i]; } s[m + 1] = n + 1; for (int i = 1; i <= m; ++i) { long long cur_time = 1ll * (s[i] - 1) * b; long long z = (t - cur_time) / a + 1; if (t < cur_time) z = 0; if (z > s[i + 1] - s[i]) { z = s[i + 1] - s[i]; } if (z >= s[i + 1] - s[i]) { opt[i][0] = -1; } else { opt[i][0] = s[i] + z; } f[i][0] = z; for (int j = 1; j <= k; ++j) { int cc = opt[i][j - 1]; if (cc == -1) { f[i][j] = 0; opt[i][j] = -1; continue; } long long cnt = (t - cur_time - 1ll * (cc - s[i]) * c) / a + 1; if (t < cur_time + 1ll * (cc - s[i]) * c) cnt = 0; if (cnt >= s[i + 1] - cc) { f[i][j] = s[i + 1] - cc; opt[i][j] = -1; } else { f[i][j] = cnt; opt[i][j] = cc + cnt; } } // for (int j = 0; j <= k; ++j) { // debug(i, j, f[i][j], opt[i][j]); // } } int res = 0; priority_queue<pair<int, int>> pq; for (int i = 1; i <= m; ++i) { res += f[i][0]; id[i] = 1; pq.push(make_pair(f[i][1], i)); } for (int i = 1; i <= k; ++i) { auto t = pq.top(); pq.pop(); res += t.first; ++id[t.second]; pq.push(make_pair(f[t.second][id[t.second]], t.second)); } cout << res - 1; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...