結果
問題 | No.3068 Speedrun (Hard) |
ユーザー |
|
提出日時 | 2025-06-01 11:20:40 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 123 ms / 2,000 ms |
コード長 | 2,277 bytes |
コンパイル時間 | 633 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 75,512 KB |
最終ジャッジ日時 | 2025-06-01 11:20:45 |
合計ジャッジ時間 | 3,811 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 32 |
ソースコード
A,B,C,D,N = map(int,input().split()) P,Q,R,S,T = map(int,input().split()) def ext_gcd(a,b): if b==0: return a,1,0 d,x,y = ext_gcd(b,a%b) return d,y,x-(a//b)*y def solve(a,b,c,A1,B1): if c<0: a = -a b = -b c = -c d,x,y = ext_gcd(a,b) if c%d!=0: return -1 a //= d b //= d c //= d d,x,y = ext_gcd(a,b) x *= c y *= c if a>0 and b>0: low = max((-x+b-1)//b,(y-B1+a-1)//a) high = min((A1-x)//b,y//a) elif a>0 and b<0: low = max((A1-x+b-1)//b,(y-B1+a-1)//a) high = min(x1//(-b),y1//a) elif a<0 and b>0: low = max((-x+b-1)//b,(y+a-1)//a) high = min((A1-x)//b,(y-B1)//a) if low>high: return -1 return (x,y,a,b,low,high) ans = -1 if S==P and S==Q and S==R: x = min(A,N) y = min(B,N-x) z = min(C,N-x-y) w = N-x-y-z ans = (x,y,z,w) elif S==P and S==Q and S!=R: z = (S*N-T)//(S-R) x = min(A,N-z) y = min(B,N-z-x) w = N-x-y-z ans = (x,y,z,w) elif S==R and S!=P and S==Q: x = (S*N-T)//(S-P) y = min(A,N-x) z = min(C,N-x-y) w = N-x-y-z ans = (x,y,z,w) elif S!=R and S!=P and S==Q: a = S-P b = S-R c = S*N-T x1,z1,a1,b1,low,high = solve(a,b,c,A,C) for k in range(low,high+1): x = x1+k*b1 z = z1-k*a1 y = min(B,N-x-z) w = N-x-y-z if 0<=w<=D: ans = (x,y,z,w) break elif S==R and S!=Q and S==P: y = (S*N-T)//(S-Q) x = min(A,N-y) z = min(C,N-x-y) w = N-x-y-z ans = (x,y,z,w) elif S!=R and S!=Q and S==P: a = S-Q b = S-R c = S*N-T y1,z1,a1,b1,low,high = solve(a,b,c,B,C) for k in range(low,high+1): y = y1+k*b1 z = z1-k*a1 x = min(A,N-y-z) w = N-x-y-z if 0<=w<=D: ans = (x,y,z,w) break else: for z in range(C+1): a = S-P b = S-Q c = S*N-T-(S-R)*z if solve(a,b,c,A,B)==-1:continue x1,y1,a1,b1,low,high = solve(a,b,c,A,B) for k in range(low,high+1): x = x1+k*b1 y = y1-k*a1 w = N-x-y-z if 0<=w<=D: ans = (x,y,z,w) break if ans != -1:break print(*ans)