結果

問題 No.3068 Speedrun (Hard)
ユーザー haihamabossu
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0