結果
| 問題 | No.3681 心の沸騰石 |
| コンテスト | |
| ユーザー |
秋ナス🍆
|
| 提出日時 | 2026-09-05 14:48:13 |
| 言語 | C++23(gcc16) (gcc 16.1.0 + boost 1.92.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 2,000 ms |
| + 328µs | |
| コード長 | 8,780 bytes |
| 記録 | |
| コンパイル時間 | 5,121 ms |
| コンパイル使用メモリ | 388,708 KB |
| 実行使用メモリ | 9,776 KB |
| 最終ジャッジ日時 | 2026-09-05 14:48:22 |
| 合計ジャッジ時間 | 6,524 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge7_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 13 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#include <iostream>
#include <string>
#include <tuple>
#include <type_traits>
#include <utility>
#include <vector>
struct FastIO {
FastIO() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
}
};
inline FastIO fast_io_init;
template <typename T>
std::istream& operator>>(std::istream& is, std::vector<T>& v);
template <typename T1, typename T2>
std::istream& operator>>(std::istream& is, std::pair<T1, T2>& p) {
return is >> p.first >> p.second;
}
template <typename Tuple, std::size_t... I>
void read_tuple_impl(std::istream& is, Tuple& t, std::index_sequence<I...>) {
(..., (is >> std::get<I>(t)));
}
template <typename... Args>
std::istream& operator>>(std::istream& is, std::tuple<Args...>& t) {
read_tuple_impl(is, t, std::index_sequence_for<Args...>{});
return is;
}
template <typename T>
std::istream& operator>>(std::istream& is, std::vector<T>& v) {
for (auto& elem : v) {
is >> elem;
}
return is;
}
template <typename T>
struct is_pair : std::false_type {};
template <typename T1, typename T2>
struct is_pair<std::pair<T1, T2>> : std::true_type {};
template <typename T>
struct is_tuple : std::false_type {};
template <typename... Args>
struct is_tuple<std::tuple<Args...>> : std::true_type {};
template <typename T>
struct is_vector : std::false_type {};
template <typename T>
struct is_vector<std::vector<T>> : std::true_type {};
template <typename T>
void adjust_zero_indexed(T& val) {
using DecayedT = std::decay_t<T>;
if constexpr (is_pair<DecayedT>::value) {
adjust_zero_indexed(val.first);
adjust_zero_indexed(val.second);
} else if constexpr (is_tuple<DecayedT>::value) {
std::apply([](auto&... args) { (adjust_zero_indexed(args), ...); }, val);
} else if constexpr (is_vector<DecayedT>::value) {
for (auto& elem : val) {
adjust_zero_indexed(elem);
}
} else if constexpr (std::is_arithmetic_v<DecayedT> &&
!std::is_same_v<DecayedT, char> &&
!std::is_same_v<DecayedT, signed char> &&
!std::is_same_v<DecayedT, unsigned char> &&
!std::is_same_v<DecayedT, wchar_t> &&
#if defined(__cpp_char8_t)
!std::is_same_v<DecayedT, char8_t> &&
#endif
!std::is_same_v<DecayedT, char16_t> &&
!std::is_same_v<DecayedT, char32_t> &&
!std::is_same_v<DecayedT, bool>) {
--val;
} else {
}
}
using default_type = long;
template <typename... Args>
void read(Args&... args) {
(std::cin >> ... >> args);
}
template <typename T = default_type>
T read_val() {
T val;
std::cin >> val;
return val;
}
template <typename T1 = default_type, typename T2 = default_type>
std::pair<T1, T2> read_pair() {
std::pair<T1, T2> p;
std::cin >> p;
return p;
}
template <typename... Args>
std::tuple<Args...> read_tuple() {
std::tuple<Args...> t;
std::cin >> t;
return t;
}
template <typename T = default_type, typename Size, std::enable_if_t<std::is_integral_v<Size> && !std::is_same_v<Size, bool>, int> = 0>
std::vector<T> read_vec(Size n, bool zero_indexed = false) {
std::vector<T> v(n);
std::cin >> v;
if (zero_indexed) {
adjust_zero_indexed(v);
}
return v;
}
template <typename T = default_type>
std::vector<T> read_vec(bool zero_indexed = false) {
int n;
std::cin >> n;
return read_vec<T>(n, zero_indexed);
}
template <typename T1 = default_type, typename T2 = default_type, typename Size, std::enable_if_t<std::is_integral_v<Size> && !std::is_same_v<Size, bool>, int> = 0>
std::vector<std::pair<T1, T2>> read_vec_pair(Size n, bool zero_indexed = false) {
return read_vec<std::pair<T1, T2>>(n, zero_indexed);
}
template <typename T1 = default_type, typename T2 = default_type>
std::vector<std::pair<T1, T2>> read_vec_pair(bool zero_indexed = false) {
int n;
std::cin >> n;
return read_vec_pair<T1, T2>(n, zero_indexed);
}
template <typename... Args, typename Size, std::enable_if_t<std::is_integral_v<Size> && !std::is_same_v<Size, bool>, int> = 0>
std::vector<std::tuple<Args...>> read_vec_tuple(Size n, bool zero_indexed = false) {
return read_vec<std::tuple<Args...>>(n, zero_indexed);
}
template <typename... Args>
std::vector<std::tuple<Args...>> read_vec_tuple(bool zero_indexed = false) {
int n;
std::cin >> n;
return read_vec_tuple<Args...>(n, zero_indexed);
}
template <typename T = default_type>
std::vector<std::vector<T>> read_vec_grid(int h, int w, bool zero_indexed = false) {
std::vector<std::vector<T>> grid(h, std::vector<T>(w));
std::cin >> grid;
if (zero_indexed) {
adjust_zero_indexed(grid);
}
return grid;
}
template <typename T = default_type>
std::vector<std::vector<T>> read_vec_grid(bool zero_indexed = false) {
int h, w;
std::cin >> h >> w;
return read_vec_grid<T>(h, w, zero_indexed);
}
template <typename T = default_type, typename Size, std::enable_if_t<std::is_integral_v<Size> && !std::is_same_v<Size, bool>, int> = 0>
std::vector<std::vector<T>> read_vec_var(Size n, bool zero_indexed = false) {
std::vector<std::vector<T>> res(n);
for (int i = 0; i < static_cast<int>(n); ++i) {
int m;
std::cin >> m;
res[i] = read_vec<T>(m, zero_indexed);
}
return res;
}
template <typename T = default_type>
std::vector<std::vector<T>> read_vec_var(bool zero_indexed = false) {
int n;
std::cin >> n;
return read_vec_var<T>(n, zero_indexed);
}
template <typename T = default_type>
T read_zero_idx() {
T val;
std::cin >> val;
adjust_zero_indexed(val);
return val;
}
inline std::vector<std::vector<int>> read_graph(int n, int m, bool directed = false) {
std::vector<std::vector<int>> g(n);
for (int i = 0; i < m; ++i) {
int u = read_zero_idx<int>();
int v = read_zero_idx<int>();
g[u].push_back(v);
if (!directed) {
g[v].push_back(u);
}
}
return g;
}
inline std::vector<std::vector<int>> read_graph(bool directed = false) {
int n, m;
std::cin >> n >> m;
return read_graph(n, m, directed);
}
#include <istream>
#include <numeric>
#include <print>
#include <vector>
#define ALL(a) (a).begin(), (a).end()
using i128 = __int128;
template <typename T, typename U>
inline bool chmin(T& a, const U& b) {
if (a > b) {
a = b;
return true;
}
return false;
}
template <typename T, typename U>
inline bool chmax(T& a, const U& b) {
if (a < b) {
a = b;
return true;
}
return false;
}
template <std::integral T>
inline T div_ceil(T a, T b) {
if (a > 0) return a / b + (a % b != 0);
return a / b;
}
template <std::integral T>
inline T div_floor(T a, T b) {
if (a < 0) return a / b - (a % b != 0);
return a / b;
}
template <std::integral T>
inline T mod(T a, T m) {
a %= m;
if (a < 0) a += m;
return a;
}
template <typename T>
inline constexpr T INF = std::numeric_limits<T>::max() / 2;
template <>
inline constexpr float INF<float> = std::numeric_limits<float>::infinity();
template <>
inline constexpr double INF<double> = std::numeric_limits<double>::infinity();
template <>
inline constexpr long double INF<long double> = std::numeric_limits<long double>::infinity();
template <typename T = int>
inline std::vector<T> iota_vec(int n, T start = 0) {
std::vector<T> v(n);
std::iota(v.begin(), v.end(), start);
return v;
}
template <typename T>
inline std::vector<T> doubled_vec(const std::vector<T>& v) {
std::vector<T> res;
res.reserve(v.size() * 2);
res.insert(res.end(), v.begin(), v.end());
res.insert(res.end(), v.begin(), v.end());
return res;
}
inline void Yes(bool b = true) {
std::println("{}", (b ? "Yes" : "No"));
}
inline void No() {
std::println("No");
}
#ifdef LOCAL
#include <utility/debug.hpp>
#else
#define debug(...)
#endif
void solve() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long R, P, Q, A, B, C, D;
read(R, P, Q, A, B, C, D);
long mx = (A + B + C + D) / 3;
auto check = [&](long k) {
long need_A = max(0L, k - A);
long need_B = max(0L, k - B);
long need_C = max(0L, k - C);
i128 cost = (i128)k * P + (i128)(need_A + need_B + need_C) * Q;
return cost <= (i128)R;
};
long ok = 0;
long ng = mx + 1;
while (abs(ok - ng) > 1) {
long mid = midpoint(ok, ng);
if (check(mid)) {
ok = mid;
} else {
ng = mid;
}
}
println("{}", ok);
}
int main() {
solve();
}
秋ナス🍆