結果
問題 | No.3068 Speedrun (Hard) |
ユーザー |
|
提出日時 | 2025-03-21 22:43:49 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,618 ms / 2,000 ms |
コード長 | 1,442 bytes |
コンパイル時間 | 2,153 ms |
コンパイル使用メモリ | 195,056 KB |
実行使用メモリ | 5,888 KB |
最終ジャッジ日時 | 2025-03-21 22:44:00 |
合計ジャッジ時間 | 10,297 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 32 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (int)(n); i++) void solve() { ll m = 4, n, t; vector<ll> a(m); rep(i, m) cin >> a[i]; cin >> n; vector<ll> p(m); rep(i, m) cin >> p[i]; cin >> t; bool s = false; if (p[2] < p[3]) { s = true; swap(a[2], a[3]); swap(p[2], p[3]); } auto check = [&](ll u, ll v) -> ll { if (v * p[2] < u) { return -1; } if (p[2] == p[3]) { if (v * p[2] != u) { return -1; } else if (a[2] + a[3] < v) { return -1; } else { return min(a[2], v); } } ll rem = v * p[2] - u; ll d = p[2] - p[3]; if (rem % d > 0) { return -1; } ll y = rem / d, x = v - y; if (x < 0 || a[2] < x || y < 0 || a[3] < y) { return -1; } return x; }; rep(x, a[0] + 1) rep(y, a[1] + 1) { if (x + y <= n && x * p[0] + y * p[1] <= t) { ll u = t - x * p[0] - y * p[1]; ll v = n - x - y; ll z = check(u, v); if (z >= 0) { ll w = n - x - y - z; if (s) { swap(z, w); swap(a[2], a[3]); swap(p[2], p[3]); } cout << x << ' ' << y << ' ' << z << ' ' << w << '\n'; return; } } } } int main() { std::cin.tie(nullptr); std::ios_base::sync_with_stdio(false); int T = 1; for (int t = 0; t < T; t++) { solve(); } return 0; }