結果

問題 No.3048 Swing
ユーザー V_Melville
提出日時 2025-03-07 22:29:35
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,502 bytes
コンパイル時間 468 ms
コンパイル使用メモリ 82,260 KB
実行使用メモリ 59,480 KB
最終ジャッジ日時 2025-03-07 22:29:58
合計ジャッジ時間 23,135 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 55 WA * 2 TLE * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

import math

def find_xn(x, n):
    if n == 0:
        return x
    
    if x > 0:
        target = x
        left, right = 0, 2 * int(math.isqrt(2 * target)) + 2
        while left < right:
            mid = (left + right) // 2
            s = mid * (mid + 1) // 2
            if s >= target:
                right = mid
            else:
                left = mid + 1
        k = left
        m = k + 1
        sum_k = k * (k + 1) // 2
        Xm = x - sum_k + (k + 1)
    else:
        target = -x
        if target == 0:
            k = 0
        else:
            left, right = 0, 2 * int(math.isqrt(2 * target)) + 2
            while left < right:
                mid = (left + right) // 2
                s = mid * (mid + 1) // 2
                if s >= target:
                    right = mid
                else:
                    left = mid + 1
            k = left
        m = k
        sum_k = k * (k + 1) // 2
        Xm = x + sum_k
    
    if n < m:
        current = x
        for i in range(1, n + 1):
            if current > 0:
                current -= i
            else:
                current += i
        return current
    else:
        t_steps = n - m
        groups = t_steps // 2
        remainder = t_steps % 2
        Xn = Xm + groups  
        
        if remainder:
            i = m + 2 * groups + 1
            if Xn > 0:
                Xn -= i
            else:
                Xn += i
        return Xn

x, n = map(int, input().split())
print(find_xn(x, n))  
0