結果

問題 No.62 リベリオン(Extra)
ユーザー maspymaspy
提出日時 2020-04-18 21:16:54
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 30 ms
10,752 KB
testcase_01 AC 30 ms
10,880 KB
testcase_02 AC 116 ms
10,752 KB
testcase_03 AC 117 ms
10,752 KB
testcase_04 AC 357 ms
10,880 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

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())
0