結果
問題 | No.62 リベリオン(Extra) |
ユーザー |
|
提出日時 | 2021-07-19 00:28:14 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 388 ms / 5,000 ms |
コード長 | 2,247 bytes |
コンパイル時間 | 556 ms |
コンパイル使用メモリ | 82,288 KB |
実行使用メモリ | 80,280 KB |
最終ジャッジ日時 | 2024-07-16 03:59:22 |
合計ジャッジ時間 | 2,016 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 3 |
ソースコード
def extgcd(a, b):if b == 0:return (a, 1, 0)(g, y, x) = extgcd(b, a % b)return (g, x, y - (a // b) * x)def easy(M, H, V, HW, OM, OH, D): # 真横or縦の時if OM != OH:return "Miss"if H >= M:if(H - M <= D * V):return "Hit"else:return "Miss"else:if(HW * 2 - H - M <= D * V):return "Hit"else:return "Miss"def solve(TY, H, W, D, MY):TY -= MYif TY < 0:TY += (TY // (2 * H)) * (2 * H)while TY < 0:TY += 2 * HA = 2 * HB = 2 * Wgcd, mb, ma = extgcd(B, A)if TY % gcd != 0:return Falseloop = A * B // gcdma *= TY // gcdmb *= TY // gcdstep = (2 * W) * mbstep %= loopwhile step < 0:step += loopreturn step <= Ddef check(P, W):P %= W * 2if P <= W:return Pelse:return (2*W) - Pdef calc(W, H, D, HX, HY, MX, MY, VX, VY):if VY == 0:return easy(MX, HX, VX, W, MY, HY, D)if VX == 0:return easy(MY, HY, VY, H, MX, HX, D)mulX = VXmulY = VY# 速さ分だけ領域、時間を拡張H *= mulXMY *= mulXHY *= mulXW *= mulYMX *= mulYHX *= mulYD *= mulYD *= mulX# X座標を合わせるmove = 0flag = Falseif MX <= HX:move = HX - MXflag = Trueelse:move = W + W - HX - MX #鏡位置の点MX += moveMY += moveD-= moveif solve(HY, H, W, D, MY) or solve(H + H - HY, H, W, D, MY): #順と逆位置return "Hit"else:if flag:move = 2 * (W - HX)else:move = 2 * HXMX += moveMY += moveD-= moveif solve(HY, H, W, D, MY) or solve(H + H - HY, H, W, D, MY):return "Hit"else:return "Miss"Q = int(input())ans = []for i in range(Q):W,H,D,Mx,My,Hx,Hy,Vx,Vy = map(int,input().split())if Vy < 0:My = H - MyHy = H - HyVy = -Vyif Vx < 0:Mx = W - MxHx = W - HxVx = -Vxprint(calc(W,H,D,Mx,My,Hx,Hy,Vx,Vy))