結果
| 問題 | No.62 リベリオン(Extra) | 
| コンテスト | |
| ユーザー |  maspy | 
| 提出日時 | 2020-04-18 21:16:54 | 
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 357 ms / 5,000 ms | 
| コード長 | 1,288 bytes | 
| コンパイル時間 | 272 ms | 
| コンパイル使用メモリ | 12,672 KB | 
| 実行使用メモリ | 10,880 KB | 
| 最終ジャッジ日時 | 2024-10-04 00:20:00 | 
| 合計ジャッジ時間 | 1,792 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 3 | 
ソースコード
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
from math import gcd
import itertools
def mod_inv(a, b):
    x, y = 1, 0
    while b:
        q, r = divmod(a, b)
        a, b = b, r
        x, y = y, x - q * y
    return x, a
def solve_linear_mod(a, b, mod):
    """ solve ax = b mod"""
    inv_a, d = mod_inv(a, mod)
    if b % d != 0:
        return None, None
    a //= d
    b //= d
    mod //= d
    x = inv_a * b % mod
    return x, mod
def solve():
    W, H, D, Mx, My, Hx, Hy, Vx, Vy = map(int, readline().split())
    d = abs(gcd(Vx, Vy))
    D *= d
    Vx //= d
    Vy //= d
    x1, mod1 = solve_linear_mod(Vx, Mx - Hx, W + W)
    x2, mod2 = solve_linear_mod(Vx, W + W - Mx - Hx, W + W)
    x3, mod3 = solve_linear_mod(Vy, My - Hy, H + H)
    x4, mod4 = solve_linear_mod(Vy, H + H - My - Hy, H + H)
    for (x, n), (y, m) in itertools.product(((x1, mod1), (x2, mod2)), ((x3, mod3), (x4, mod4))):
        if x is None or y is None:
            continue
        u, mod = solve_linear_mod(n, y - x, m)
        if u is None:
            continue
        u %= mod
        t = x + n * u
        if t <= D:
            return 'Hit'
    return 'Miss'
Q = int(readline())
for _ in range(Q):
    print(solve())
            
            
            
        