結果
| 問題 | No.3559 +A,-B |
| コンテスト | |
| ユーザー |
kidodesu
|
| 提出日時 | 2026-05-29 21:34:33 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 383 ms / 2,000 ms |
| コード長 | 1,405 bytes |
| 記録 | |
| コンパイル時間 | 382 ms |
| コンパイル使用メモリ | 85,176 KB |
| 実行使用メモリ | 84,740 KB |
| 最終ジャッジ日時 | 2026-05-29 21:34:47 |
| 合計ジャッジ時間 | 9,198 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge4_0 |
| 純コード判定待ち |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | AC * 4 |
| 部分点2 | 60 % | AC * 7 |
| 部分点3 | 30 % | AC * 20 |
| 合計 | 100 点 |
ソースコード
def main():
n, x, y, a, b = list(map(int, input().split()))
if 0 < a and 0 < b:
z = x + y
if 0 <= z:
m = min(z//b+1, n)
n -= m
y -= m * b
else:
m = min((abs(z)-1)//a, n)
n -= m
x += m * a
if n == 0: return x, y
l = 0
r = n
def f(s):
nx = x + s * a
ny = y - (n-s) * b
if -b <= (nx+ny) < a:
return 0
elif a <= (nx+ny):
return 1
else:
return -1
if not f(0): return x, y - b*n
elif not f(n): return x + a*n, y
while r - l > 1:
m = (l + r) >> 1
rep = f(m)
if not rep: return x+a*m, y-b*(n-m)
elif 0 < rep: r = m
else: l = m
for m in [l, r]:
if not f(m): return x+a*m, y-b*(n-m)
else:
if 0 <= x+y:
if b <= 0:
return x, y-b*n
else:
m = min(n, (x+y+b)//b)
n -= m
y -= b*m
return x+a*n, y
else:
if a <= 0:
return x+a*n, y
else:
m = min(n, (abs(x+y)+a-1)//a)
n -= m
x += a*m
return x, y-b*n
for _ in range(int(input())):
print(*main())
kidodesu