結果
| 問題 | No.61 リベリオン | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2022-01-25 01:09:27 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 431 ms / 5,000 ms | 
| コード長 | 1,376 bytes | 
| コンパイル時間 | 484 ms | 
| コンパイル使用メモリ | 82,376 KB | 
| 実行使用メモリ | 82,960 KB | 
| 最終ジャッジ日時 | 2024-12-15 05:52:08 | 
| 合計ジャッジ時間 | 2,317 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 4 | 
ソースコード
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()
            
            
            
        