結果
問題 |
No.2701 A cans -> B cans
|
ユーザー |
|
提出日時 | 2024-04-25 11:07:16 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,856 bytes |
コンパイル時間 | 1,916 ms |
コンパイル使用メモリ | 204,160 KB |
最終ジャッジ日時 | 2025-02-21 08:52:16 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 6 |
other | AC * 23 WA * 50 |
ソースコード
// A cans -> B cans #include <bits/stdc++.h> // #include <atcoder/all> #include <iostream> #include <math.h> using namespace std; // using namespace atcoder; // using mint = modint998244353; // using mint = modint1000000007; using vi = vector<int>; using vvi = vector<vector<int>>; using ll = long long; template <class T> using max_heap = priority_queue<T>; template <class T> using min_heap = priority_queue<T, vector<T>, greater<>>; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep2(i, f, n) for (int i = (int) f; i < (int)(n); i++) #define repd(i, n, l) for (int i = (int) n; i >= (int) l; i--) const ll inf = ll(1e9+7); int main() { int n, m; cin >> n >> m; vector<vector<ll>> C; rep(i, n){ ll a, b, c; cin >> a >> b >> c; C.push_back({a, b, c}); } sort(C.begin(), C.end(), [](vector<ll> &left, vector<ll> &right){ ll a1 = left[1] * left[2]; ll b1 = left[0] - left[1]; ll a2 = right[1] * right[2]; ll b2 = right[0] - right[1]; if (a1 * b2 > a2 * b1) return true; else if (a1 * b2 == a2 * b1 && left[0] < right[0]) return true; else return false; }); vector<ll> ans(m+1, 0); for (int p = 1; p <= m; p++){ ans[p] = max(ans[p], ans[p-1]); ll now = p; for (auto c : C){ if (c[0] > now) continue; ll temp = 0; ll now_i = 0; now -= c[0]; now_i += c[1]; temp += c[1]*c[2]; ans[p] = max(ans[p], temp + ans[now]); while (now + now_i >= c[0]){ now -= (c[0] - c[1]); temp += c[1] * c[2]; ans[p] = max(ans[p], temp + ans[now]); } } } for (int i = 1; i <= m; i++){ cout << ans[i] << endl; } return 0; }