結果

問題 No.3559 +A,-B
コンテスト
ユーザー LyricalMaestro
提出日時 2026-10-18 02:33:34
言語 PyPy3
(8.0.0 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 3,128 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 84 ms
コンパイル使用メモリ 64,304 KB
実行使用メモリ 74,276 KB
最終ジャッジ日時 2026-10-18 02:34:14
合計ジャッジ時間 11,005 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点1 10 % AC * 4
部分点2 60 % AC * 2 WA * 5
部分点3 30 % AC * 6 WA * 14
合計 10 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

## https://yukicoder.me/problems/no/3559

def solve2(N, X, Y, A, B):
    if A >= B:
        l0 = 0
        if X + Y < 0:
            l0 = (- X - Y) // A
            if l0 * A + X + Y < 0:
                l0 += 1
            if N < l0:
                return X + N * A, Y

        X += l0 * A
        N -= l0
        low = 0
        high = N

        def aaa(l0):
            a = X + Y + l0 * A - A + 1
            l = a // B
            l += (1 if a % B > 0 else 0)
            return l + l0 <= N, l

        while high - low > 1:
            mid = (high + low ) //2
            if aaa(mid)[0]:
                low = mid
            else:
                high = mid
        if aaa(high)[0]:
            v = high
        else:
            v = low

        _, w = aaa(v)
        ans_X = X + v * A
        ans_Y = Y - w * B
        n = N - (w + v)
        ans_Y -= n * B
        return ans_X, ans_Y
    else:
        # B > A
        l0 = 0
        if X + Y >= 0:
            l0 = (X + Y) // B
            if -l0 * B + X + Y >= 0:
                l0 += 1
            if N < l0:
                return X, Y - N * B
        Y -= l0 * B
        N -= l0
        low = 0
        high = N

        def aaa(l0):
            a = - B + 1 + l0 * B - X - Y
            l = a // A
            l += (1 if a % A > 0 else 0)
            return l + l0 <= N, l

        while high - low > 1:
            mid = (high + low ) //2
            if aaa(mid)[0]:
                low = mid
            else:
                high = mid
        if aaa(high)[0]:
            v = high
        else:
            v = low

        _, w = aaa(v)
        ans_X = X + w * A
        ans_Y = Y - v * B
        n = N - (w + v)
        ans_X += n * A
        return ans_X, ans_Y




        




def solve(N, X, Y, A, B):
    if A <= 0 and B <= 0:
        if X + Y < 0:
            ans_X = X + N * A
            ans_Y = Y
        else:
            ans_X = X
            ans_Y = Y - N * B
        return ans_X, ans_Y
    elif A <= 0:
        if X + Y < 0:
            ans_X = X + N * A
            ans_Y = Y
        else:
            l0 = (X + Y) // B
            if X + Y >= l0 * B:
                l0 += 1
            if N < l0:
                ans_X = X
                ans_Y = Y - N * B
            else:
                ans_X = X + (N - l0) * A
                ans_Y = Y - l0 * B
        return ans_X, ans_Y
    elif B <= 0:
        if X + Y >= 0:
            ans_X = X
            ans_Y = Y - N * B
        else:
            l0 = (-X - Y) // A
            if l0 * A < - X - Y:
                l0 += 1
            if N < l0:
                ans_X = X + N * A
                ans_Y = Y
            else:
                ans_X = X + l0 * A
                ans_Y = Y - (N - l0) * B
        return ans_X, ans_Y
    else:
        return solve2(N, X, Y, A, B)
            







def main():
    T = int(input())
    answers = []
    for  _ in range(T):
        N, X, Y, A, B = map(int, input().split())
        ans = solve(N, X, Y, A, B)
        answers.append(ans)

    for ans in answers:
        print(ans[0], ans[1])




        

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