結果
問題 |
No.62 リベリオン(Extra)
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:42:10 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 4,584 bytes |
コンパイル時間 | 257 ms |
コンパイル使用メモリ | 81,944 KB |
実行使用メモリ | 87,496 KB |
最終ジャッジ日時 | 2025-06-12 21:46:11 |
合計ジャッジ時間 | 1,476 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | WA * 3 |
ソースコード
import sys import math def extended_gcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = extended_gcd(b % a, a) return (g, x - (b // a) * y, y) def solve(): input = sys.stdin.read().split() idx = 0 Q = int(input[idx]) idx += 1 for _ in range(Q): W = int(input[idx]) H = int(input[idx+1]) D = int(input[idx+2]) Mx = int(input[idx+3]) My = int(input[idx+4]) Hx = int(input[idx+5]) Hy = int(input[idx+6]) Vx = int(input[idx+7]) Vy = int(input[idx+8]) idx +=9 hit = False t1 = None t2 = None if Vx != 0: t1_num = Mx - Hx t1 = t1_num / Vx if Vy != 0: t2_num = My - Hy t2 = t2_num / Vy if Vx == 0 and Vy == 0: pass elif Vx != 0 and Vy != 0: if t1 == t2 and t1 >= 0 and t1 <= D: hit = True elif Vx == 0: if Hx == Mx: if Vy == 0: if Hy == My: hit = True else: if (My - Hy) * Vy >= 0: t = (My - Hy) / Vy if t >=0 and t <= D: hit = True else: # Vy ==0 if Hy == My: if Vx ==0: if Hx == Mx: hit = True else: if (Mx - Hx) * Vx >=0: t = (Mx - Hx)/Vx if t >=0 and t <= D: hit = True if hit: print("Hit") continue signs_x = [1, -1] signs_y = [1, -1] for sign_x in signs_x: for sign_y in signs_y: a = 2 * W * Vy b = -2 * H * Vx c_part = (Hx - sign_x * Mx) * Vy - (Hy - sign_y * My) * Vx c = c_part g = math.gcd(a, b) if g ==0: if c ==0: pass else: continue else: if c % g !=0: continue a_prime = a // g b_prime = b // g c_prime = c // g if a_prime ==0 and b_prime ==0: if c_prime !=0: continue else: k0 = 0 m0 =0 elif a_prime ==0: if c_prime % b_prime !=0: continue m0 = c_prime // b_prime k0 =0 elif b_prime ==0: if c_prime % a_prime !=0: continue k0 = c_prime // a_prime m0 =0 else: g2, x, y = extended_gcd(a_prime, b_prime) if g2 !=1: pass k0 = x * c_prime m0 = y * c_prime if Vx ==0 or Vy ==0: if Vx ==0: if a ==0: pass else: pass else: pass pass try: numerator_t = 2 * k0 * W + sign_x * Mx - Hx if Vx ==0: pass else: t = numerator_t / Vx except ZeroDivisionError: continue else: if t <0 or t > D: continue y_t = Hy + Vy * t mirrored_y = 2 * m0 * H + sign_y * My if abs(y_t - mirrored_y) > 1e-9: continue else: hit = True break if hit: break if hit: print("Hit") else: print("Miss") if __name__ == "__main__": solve()