結果

問題 No.3048 Swing
ユーザー KaniOiC
提出日時 2025-03-07 22:06:21
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 39 ms / 2,000 ms
コード長 667 bytes
コンパイル時間 485 ms
コンパイル使用メモリ 82,280 KB
実行使用メモリ 53,704 KB
最終ジャッジ日時 2025-06-20 02:25:05
合計ジャッジ時間 4,005 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 62
権限があれば一括ダウンロードができます

ソースコード

diff #

x, n = map(int, input().split())

if x < 0:
    f = 1
    x *= -1
else:
    f = 0

def is_ok(arg):
    S = arg * (arg + 1) // 2
    return S <= abs(x)

def bs(ok, ng):
    while abs(ok - ng) > 1:
        mid = (ok + ng) // 2
        if is_ok(mid):
            ok = mid
        else:
            ng = mid
    return ok

m = bs(0, 10**9 * 2)

if n <= m:
    S = n * (n+1) // 2
    x += (-1) * S
    x *= (-1) ** f
    print(x)
    exit()

S = m * (m+1) // 2
x += (-1) * S
x *= (-1) ** f
n -= m

if x <= 0:
    if n % 2 == 0:
        x -= n // 2
    else:
        x += m - (-n//2)
else:
    if n % 2 == 0:
        x += n // 2
    else:
        x -= m - (-n//2)

print(x)
0