結果
| 問題 |
No.3048 Swing
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-01-20 22:43:22 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 31 ms / 2,000 ms |
| コード長 | 1,015 bytes |
| コンパイル時間 | 577 ms |
| コンパイル使用メモリ | 12,032 KB |
| 実行使用メモリ | 10,240 KB |
| 最終ジャッジ日時 | 2025-06-20 02:20:35 |
| 合計ジャッジ時間 | 3,742 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 62 |
ソースコード
## a, a+d, a+2d, .., b の和
def rangesum(a, b, d):
if not a <= b:
return 0
b = a + (b - a) // d * d
return (b + a) * ((b - a) // d + 1) // 2
## 1+2+..+i >= A となる最小の i
def f(A):
ok = A
ng = 0
while ok - ng > 1:
m = (ok + ng) // 2
if rangesum(1, m, 1) >= A:
ok = m
else:
ng = m
return ok
def exact(x, n):
for i in range(1, n + 1):
if x <= 0:
x += i
else:
x -= i
return x
def solve(x, n):
if x <= 0:
m = min(n, f(-x + 1))
x += rangesum(1, m, 1)
else:
m = min(n, f(x))
x -= rangesum(1, m, 1)
m += 1
if m <= n:
sum0 = rangesum(m, n, 2)
sum1 = rangesum(m + 1, n, 2)
if x > 0:
x -= sum0
x += sum1
else:
x += sum0
x -= sum1
return x
x, n = map(int, input().split())
assert -10**18 <= x <= 10**18
assert 1 <= n <= 10**18
print(solve(x, n))