結果
問題 | 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;}