結果
| 問題 |
No.3068 Speedrun (Hard)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-03-21 23:08:52 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,388 bytes |
| コンパイル時間 | 304 ms |
| コンパイル使用メモリ | 12,416 KB |
| 実行使用メモリ | 17,944 KB |
| 最終ジャッジ日時 | 2025-03-21 23:08:57 |
| 合計ジャッジ時間 | 4,191 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 TLE * 1 |
| other | -- * 32 |
ソースコード
A, B, C, D, N = map(int, input().split())
P, Q, R, S, T = map(int, input().split())
# aの最小値は、a + b >= N - (C + D) かつ b <= B → a >= N - (C + D) - B
a_min = max(0, N - (C + D) - B)
a_max = min(A, N)
# aを大きい順に試す
for a in range(a_max, a_min - 1, -1):
# 残り時間が不足している場合はスキップ
remaining_time_after_a = T - a * P
if remaining_time_after_a < 0:
continue
# bの範囲を計算
# rem = c + d <= C + D → rem >= N -a - B
b_low = max(0, N - a - (C + D))
b_high = min(B, N - a)
if b_low > b_high:
continue
# 時間制約からbの上限を再計算
if Q > 0:
max_b_by_time = remaining_time_after_a // Q
b_high = min(b_high, max_b_by_time)
else:
# Qが0の場合はbが何でも良いが、問題文でQ>0と仮定
pass
if b_low > b_high:
continue
# bを大きい順に試す
for b in range(b_high, b_low - 1, -1):
rem = N - a - b
if rem < 0 or rem > C + D:
continue
time_rem = remaining_time_after_a - b * Q
if time_rem < 0:
continue
# RとSが異なる場合
if R != S:
denominator = R - S
numerator = time_rem - S * rem
if denominator == 0:
continue # このケースはR=Sでないので発生しない
if numerator % denominator != 0:
continue
c = numerator // denominator
d = rem - c
if 0 <= c <= C and 0 <= d <= D:
print(a, b, c, d)
exit()
else:
# R == Sの場合、time_rem == R * rem かつ c + d = rem
if time_rem != R * rem:
continue
# cの範囲をチェック
c_min = max(0, rem - D)
c_max = min(C, rem)
if c_min > c_max:
continue
# 最大値から試す
c = c_max
d = rem - c
if d >= 0 and d <= D:
print(a, b, c, d)
exit()
else:
# 最小値を試す
c = c_min
d = rem - c
if c >= 0 and c <= C and d >= 0 and d <= D:
print(a, b, c, d)
exit()