제출 #321685

#제출 시각아이디문제언어결과실행 시간메모리
321685Kevin_Zhang_TWSemiexpress (JOI17_semiexpress)C++17
48 / 100
1 ms364 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define AI(i) begin(i), end(i) #define pb emplace_back #ifdef KEV #define DE(args...) kout("[ " + string(#args) + " ] = ", args) void kout() { cerr << endl; } template <class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); } template <class T> void debug(T l, T r) { while (l != r) cerr << *l << " \n"[next(l) == r], ++l; } #else #define DE(...) 0 #define debug(...) 0 #endif template <class T> bool chmin(T &a, T b) { return b < a ? (a = b, true) : false; } template <class T> bool chmax(T &a, T b) { return a < b ? (a = b, true) : false; } #define int ll const int MAX_N = 3010; int n, m, k; ll a, b, c, T; ll s[MAX_N]; int solve() { int ad = k - m, res = 0; vector<int> obj; assert(a > c && c > b); vector<int> all; for (int i = 1;i <= m;++i) { ll et = (s[i] - 1) * b; if (et > T) break; if (i == m) { ++res; break; } int id = s[i]; ll ex = (T - et) / a; if (id + ex >= s[i+1] - 1) { res += s[i+1] - s[i]; continue; } res += ex + 1; id += ex + 1; et += c * (ex + 1); while ( ad && id < s[i+1] ) { if (et > T) break; ll ex = (T - et) / a; if (id + ex < s[i+1]) { while (obj.size() && obj.back() > ex + 1) --ad, res += obj.back(), obj.pop_back(); if (ad == 0) break; --ad; res += ex + 1; id += ex + 1; et += c * (ex + 1); all.pb(ex + 1); } else { obj.pb( s[i+1] - id ); assert(s[i+1] > id); assert(all.empty() || obj.back() <= all.back()); break; } } sort(AI(obj)); } assert(ad >= 0); for (int i = 1;i < all.size();++i) assert(all[i] <= all[i-1]); sort(AI(obj), greater<>()); chmin(ad, (int)obj.size()); for (int i = 0;i < ad;++i) res += obj[i]; assert(res <= n); assert(res >= 1); return res - 1; } int32_t main() { ios_base::sync_with_stdio(0), cin.tie(0); cin >> n >> m >> k >> a >> b >> c >> T; for (int i = 1;i <= m;++i) cin >> s[i]; cout << solve() << '\n'; }

컴파일 시 표준 에러 (stderr) 메시지

semiexpress.cpp: In function 'll solve()':
semiexpress.cpp:81:19: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |  for (int i = 1;i < all.size();++i)
      |                 ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...