結果
問題 | No.2693 Sword |
ユーザー |
![]() |
提出日時 | 2024-03-22 21:42:09 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 1,555 bytes |
コンパイル時間 | 2,995 ms |
コンパイル使用メモリ | 247,116 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-09-30 11:10:39 |
合計ジャッジ時間 | 3,992 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 29 |
ソースコード
#include <bits/stdc++.h>#include <cassert>using namespace std;using ll = long long int;using u64 = unsigned long long;using pll = pair<ll, ll>;// #include <atcoder/all>// using namespace atcoder;#define REP(i, a, b) for (ll i = (a); i < (b); i++)#define REPrev(i, a, b) for (ll i = (a); i >= (b); i--)#define ALL(coll) (coll).begin(), (coll).end()#define SIZE(v) ((ll)((v).size()))#define REPOUT(i, a, b, exp, sep) REP(i, (a), (b)) cout << (exp) << (i + 1 == (b) ? "" : (sep)); cout << "\n"// @@ !! LIM(f:updMaxMin)// ---- inserted function f:updMaxMin from util.cctemplate<typename T>bool updMax(T& tmax, const T& x) {if (x > tmax) { tmax = x; return true; }else { return false; }}template<typename T>bool updMin(T& tmin, const T& x) {if (x < tmin) { tmin = x; return true; }else { return false; }}// ---- end f:updMaxMin// @@ !! LIM -- end mark --int main(/* int argc, char *argv[] */) {ios_base::sync_with_stdio(false);cin.tie(nullptr);cout << setprecision(20);ll N, P, K; cin >> N >> P >> K;ll lim = (ll)(1e18) + 1;vector tbl_init(K + 1, 0LL);auto tbl = tbl_init;tbl[0] = P;REP(i, 0, N) {auto prev = tbl;ll T, B; cin >> T >> B;if (T == 1) {REP(k, 0, K) {updMax(tbl[k + 1], min(lim, prev[k] + B));}}else if (T == 2) {REP(k, 0, K) {updMax(tbl[k + 1], min(lim, prev[k] * 2));}}else assert(0);}ll ans = tbl[K] == lim ? -1 : tbl[K];cout << ans << endl;return 0;}