結果
| 問題 |
No.62 リベリオン(Extra)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-01-25 01:09:13 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 483 ms / 5,000 ms |
| コード長 | 1,376 bytes |
| コンパイル時間 | 340 ms |
| コンパイル使用メモリ | 82,056 KB |
| 実行使用メモリ | 84,540 KB |
| 最終ジャッジ日時 | 2024-12-15 05:52:05 |
| 合計ジャッジ時間 | 2,692 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 3 |
ソースコード
import sys
def input(): return sys.stdin.readline().rstrip()
def exgcd(a, b):
if b == 0:
return (1, 0)
if a == 0:
return (0, 1)
k = a // b
(x, y) = exgcd(b, a-k*b)
return (y, x-k*y)
def route(W, H, dx, dy):
Hinv, Winv = exgcd(H, W)
g = Hinv*H + Winv*W
if (dy - dx) % g != 0:
return float('inf')
rem = dy % g
W, H, dx, dy = W // g, H // g, dx // g, dy // g
ans = (Hinv*H*dx + Winv*W*dy) % (H*W)
return ans * g + rem
def solve(W, H, D, Mx, My, Hx, Hy, Vx, Vy):
if Vx < 0:
Hx, Mx, Vx = W-Hx, W-Mx, -Vx
if Vy < 0:
Hy, My, Vy = H-Hy, H-My, -Vy
if Vx == 0:
dis = My-Hy if Hy < My else 2*H-(My+Hy)
return Hx == Mx and dis <= D*Vy
if Vy == 0:
dis = Mx-Hx if Hx < Mx else 2*W-(Mx+Hx)
return Hy == My and dis <= D*Vx
W *= Vy
D *= Vy
Hx *= Vy
Mx *= Vy
H *= Vx
D *= Vx
Hy *= Vx
My *= Vx
# W, H, D, Mx, My, Hx, Hy
return min([
route(2*W, 2*H, Mx - Hx, My - Hy),
route(2*W, 2*H, 2*W-Mx - Hx, My - Hy),
route(2*W, 2*H, 2*W-Mx - Hx, 2*H-My - Hy),
route(2*W, 2*H, Mx - Hx, 2*H-My - Hy),
]) <= D
def main():
Q = int(input())
for i in range(Q):
print('Hit' if solve(*map(int, input().split())) else 'Miss')
if __name__ == '__main__':
main()