제출 #355532

#제출 시각아이디문제언어결과실행 시간메모리
355532SeDunionSemiexpress (JOI17_semiexpress)C++17
100 / 100
9 ms492 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 1e6 + 66; int x[N]; ll d[N]; /* 10 3 5 10 3 5 30 1 6 10 di 0 10 20 30 40 15 25 35 45 27 */ int s[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); int n, m, k; cin >> n >> m >> k; ll A, B, C, T; cin >> A >> B >> C >> T; int ans = 0; for (int i = 1 ; i <= m ; ++ i) { cin >> x[i]; } for (int i = 2 ; i <= m ; ++ i) { if ((x[i] - 1) * B <= T) ans++; int l = x[i - 1], r = x[i]; ll cost = (x[i - 1] - 1) * B; s[i] = l + 1; if (cost > T) continue; ll rem = T - cost; ll cnt = rem / A; cnt = min(cnt, r - l - 1ll); ans += cnt; s[i] = l + cnt + 1; } for (; m < k ; -- k) { pair<ll,int> mx = {-1, -1}; for (int i = 2 ; i <= m ; ++ i) { int l = s[i], r = x[i]; if (l >= r) continue; ll cost = (x[i - 1] - 1) * B + (s[i] - x[i - 1]) * C; if (cost > T) continue; ll rem = T - cost; ll cnt = rem / A + 1; cnt = min(cnt, r - l - 0ll); mx = max(mx, {cnt, i}); } if (mx.first == -1) break; s[mx.second] += mx.first; ans += mx.first; } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...