結果
問題 | No.2390 Udon Coupon (Hard) |
ユーザー | 👑 Mizar |
提出日時 | 2023-07-04 02:14:35 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 9 ms / 2,000 ms |
コード長 | 1,627 bytes |
コンパイル時間 | 569 ms |
コンパイル使用メモリ | 59,588 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-10-06 01:36:05 |
合計ジャッジ時間 | 2,117 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,816 KB |
testcase_01 | AC | 1 ms
6,816 KB |
testcase_02 | AC | 2 ms
6,820 KB |
testcase_03 | AC | 2 ms
6,816 KB |
testcase_04 | AC | 2 ms
6,820 KB |
testcase_05 | AC | 3 ms
6,816 KB |
testcase_06 | AC | 1 ms
6,816 KB |
testcase_07 | AC | 2 ms
6,816 KB |
testcase_08 | AC | 2 ms
6,816 KB |
testcase_09 | AC | 5 ms
6,816 KB |
testcase_10 | AC | 1 ms
6,820 KB |
testcase_11 | AC | 2 ms
6,816 KB |
testcase_12 | AC | 1 ms
6,816 KB |
testcase_13 | AC | 2 ms
6,820 KB |
testcase_14 | AC | 2 ms
6,820 KB |
testcase_15 | AC | 2 ms
6,820 KB |
testcase_16 | AC | 2 ms
6,816 KB |
testcase_17 | AC | 2 ms
6,820 KB |
testcase_18 | AC | 2 ms
6,816 KB |
testcase_19 | AC | 2 ms
6,816 KB |
testcase_20 | AC | 1 ms
6,820 KB |
testcase_21 | AC | 1 ms
6,816 KB |
testcase_22 | AC | 2 ms
6,816 KB |
testcase_23 | AC | 2 ms
6,816 KB |
testcase_24 | AC | 3 ms
6,816 KB |
testcase_25 | AC | 3 ms
6,816 KB |
testcase_26 | AC | 3 ms
6,820 KB |
testcase_27 | AC | 4 ms
6,816 KB |
testcase_28 | AC | 3 ms
6,816 KB |
testcase_29 | AC | 5 ms
6,820 KB |
testcase_30 | AC | 5 ms
6,816 KB |
testcase_31 | AC | 5 ms
6,816 KB |
testcase_32 | AC | 5 ms
6,820 KB |
testcase_33 | AC | 5 ms
6,816 KB |
testcase_34 | AC | 8 ms
6,816 KB |
testcase_35 | AC | 8 ms
6,816 KB |
testcase_36 | AC | 8 ms
6,816 KB |
testcase_37 | AC | 8 ms
6,820 KB |
testcase_38 | AC | 9 ms
6,820 KB |
testcase_39 | AC | 5 ms
6,820 KB |
testcase_40 | AC | 4 ms
6,820 KB |
testcase_41 | AC | 5 ms
6,820 KB |
testcase_42 | AC | 4 ms
6,816 KB |
testcase_43 | AC | 3 ms
6,816 KB |
testcase_44 | AC | 2 ms
6,820 KB |
testcase_45 | AC | 2 ms
6,816 KB |
testcase_46 | AC | 1 ms
6,820 KB |
testcase_47 | AC | 2 ms
6,820 KB |
testcase_48 | AC | 2 ms
6,816 KB |
testcase_49 | AC | 2 ms
6,816 KB |
ソースコード
#include <algorithm> // max, min #include <cstdlib> // abort #include <iostream> // cin, cout, endl #include <utility> // swap using ll = long long; // O(A^2)解法 // 入力制約: 0 <= n <= 10^13, 0 < a_i <= 10^5, 0 <= b_min, floor(n / a_min) * b_max <= 2^60 int main() { ll n, a1, b1, a2, b2, a3, b3; std::cin >> n >> a1 >> b1 >> a2 >> b2 >> a3 >> b3; ll a_min = std::min({a1, a2, a3}), a_max = std::max({a1, a2, a3}); ll b_min = std::min({b1, b2, b3}), b_max = std::max({b1, b2, b3}); if (!( n >= 0 && n <= 10000000000000 && a_min > 0 && a_max <= 100000 && b_min >= 0 && (unsigned __int128)(n / a_min) * (unsigned __int128)b_max <= (1ULL << 60) )) { std::abort(); } if (a2 * b1 < a1 * b2) { std::swap(a1, a2); std::swap(b1, b2); } if (a3 * b1 < a1 * b3) { std::swap(a1, a3); std::swap(b1, b3); } // a1inv = ceil(2^62 / a1) = floor((2^62 - 1) / a1) + 1 // 2^62 / a1 <= ceil(2^62 / a1) = a1inv < ((2^62 / a1) + 1) ll r = 0, a1b2 = a1 * std::max(b2, 1LL), a1b3 = a1 * std::max(b3, 1LL), a1inv = ((1LL << 62) - 1) / a1 + 1; for (ll p = 0, s = n; p < a1b2 && s >= 0; p += b2, s -= a2) { for (ll q = 0, t = s; q < a1b3 && t >= 0; q += b3, t -= a3) { // 準定数を除数とする除算の定数倍高速化 // 0 < a1 <= 10^5, 0 <= t <= n <= 10^13 < 2^62 // quot = floor((n - (i * a2 + j * a3)) / a1) = floor(t / a1) = floor((t * 4) * ceil(2^62 / a1) / 2^64) - (0 または 1) ll quot = (ll)(((unsigned __int128)(t * 4) * (unsigned __int128)a1inv) >> 64); quot -= (quot * a1 > t); r = std::max(r, quot * b1 + p + q); } } std::cout << r << std::endl; return 0; }