結果
| 問題 | No.3559 +A,-B |
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2026-06-03 16:02:06 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 514 ms / 2,000 ms |
| コード長 | 1,434 bytes |
| 記録 | |
| コンパイル時間 | 411 ms |
| コンパイル使用メモリ | 85,632 KB |
| 実行使用メモリ | 84,096 KB |
| 最終ジャッジ日時 | 2026-06-03 16:02:23 |
| 合計ジャッジ時間 | 14,118 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
| 純コード判定待ち |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | AC * 4 |
| 部分点2 | 60 % | AC * 7 |
| 部分点3 | 30 % | AC * 20 |
| 合計 | 100 点 |
ソースコード
# 解説を見た。これは解けなくてはいけなかった。
import sys
input = sys.stdin.readline
T=int(input())
for tests in range(T):
N,X,Y,A,B=list(map(int,input().split()))
D=dict()
count=0
while N>0 and count<=10:
count+=1
#print(X,Y,N)
if X+Y in D:
mae,maeX,maeY=D[X+Y]
q=(mae)-(N)
k=N//q
N-=k*q
X-=(maeX-X)*k
Y-=(maeY-Y)*k
else:
D[X+Y]=(N,X,Y)
if X+Y<0:
if A==0:
N=0
elif A>0:
k=-(X+Y)
kai=(k+A-1)//A
MIN=min(N,kai)
N-=MIN
X+=MIN*A
else:
X+=N*A
N=0
elif X+Y>=0:
if B==0:
N=0
elif B>0:
k=(X+Y)
kai=(k+B)//B
MIN=min(N,kai)
N-=MIN
Y-=MIN*B
else:
Y-=N*B
N=0
if N==0:
print(X,Y)
else:
OK=1<<63
NG=-1<<63
while OK>NG+1:
mid=(OK+NG)//2
k=X+Y+mid*A-(N-mid)*B
if k>=-B:
OK=mid
else:
NG=mid
print(X+OK*A,Y-(N-OK)*B)
titia