結果

問題 No.61 リベリオン
ユーザー colognecologne
提出日時 2022-01-25 01:09:27
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 446 ms / 5,000 ms
コード長 1,376 bytes
コンパイル時間 413 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 82,168 KB
最終ジャッジ日時 2024-05-08 22:04:32
合計ジャッジ時間 2,172 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 38 ms
51,968 KB
testcase_01 AC 36 ms
52,480 KB
testcase_02 AC 37 ms
51,968 KB
testcase_03 AC 446 ms
82,168 KB
testcase_04 AC 444 ms
82,168 KB
testcase_05 AC 37 ms
52,608 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

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