結果

問題 No.2099 [Cherry Alpha B] Time Machine
ユーザー lam6er
提出日時 2025-03-31 17:55:43
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,067 bytes
コンパイル時間 139 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 75,848 KB
最終ジャッジ日時 2025-03-31 17:56:47
合計ジャッジ時間 7,930 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 67 WA * 5
権限があれば一括ダウンロードができます

ソースコード

diff #

def main():
    import sys
    import math

    T = int(sys.stdin.readline())
    X, A = map(int, sys.stdin.readline().split())
    Y, B = map(int, sys.stdin.readline().split())

    min_cost = float('inf')

    # Case 0: Only waiting
    if T > 0:
        min_cost = min(min_cost, T)

    # Consider a=0
    if A > 0:
        a = 0
        numerator = a * A - T
        if numerator <= 0:
            b_min = 0
        else:
            b_min = max(0, (numerator + B - 1) // B)
        s = a * A - b_min * B
        if s <= T:
            cost = a * X + b_min * Y + (T - s)
            if cost < min_cost:
                min_cost = cost

    # Iterate a from 0 to 200,000
    max_a = 200000
    for a in range(max_a + 1):
        numerator = a * A - T
        if numerator <= 0:
            b = 0
        else:
            b = (numerator + B - 1) // B  # ceil division
        b = max(b, 0)
        s = a * A - b * B
        if s <= T:
            cost = a * X + b * Y + (T - s)
            if cost < min_cost:
                min_cost = cost

    # Iterate b from 0 to 200,000
    max_b = 200000
    for b in range(max_b + 1):
        if B == 0:
            continue  # shouldn't happen per input constraints
        s_part = -b * B
        target = T - s_part  # required a*A = target
        if A == 0:
            a = 0 if target <= 0 else -1
        else:
            a = (target) // A
            if a * A != target:
                a = (target) // A  # floor
        for delta in [a-1, a, a+1, a+2, a+3]:
            if delta < 0:
                continue
            aa = delta
            s = aa * A - b * B
            if s <= T:
                cost = aa * X + b * Y + (T - s)
                if cost < min_cost:
                    min_cost = cost

    # Handle a=0 for T < 0
    if T < 0:
        required_b = (-T + B - 1) // B  # ceil(-T / B)
        required_b = max(required_b, 0)
        cost = required_b * Y + (T + required_b * B)
        if cost < min_cost:
            min_cost = cost

    print(min_cost)

if __name__ == '__main__':
    main()
0