結果
問題 | No.62 リベリオン(Extra) |
ユーザー |
|
提出日時 | 2022-08-25 23:56:08 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 308 ms / 5,000 ms |
コード長 | 3,502 bytes |
コンパイル時間 | 170 ms |
コンパイル使用メモリ | 81,860 KB |
実行使用メモリ | 78,544 KB |
最終ジャッジ日時 | 2024-10-13 04:35:54 |
合計ジャッジ時間 | 1,697 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 3 |
ソースコード
from math import gcddef inv_gcd(a, b):a = a % bif a == 0:return (b, 0)s = bt = am0 = 0m1 = 1while(t):u = s//ts -= t*um0 -= m1*us, t = t, sm0, m1 = m1, m0if m0 < 0:m0 += b//sreturn (s, m0)def inv_mod(x, m):assert 1 <= mz = inv_gcd(x, m)assert z[0] == 1return z[1]def crt(r, m):assert len(r) == len(m)n = len(r)r0 = 0m0 = 1for i in range(n):assert 1 <= m[i]r1 = r[i] % m[i]m1 = m[i]if m0 < m1:r0, r1 = r1, r0m0, m1 = m1, m0if (m0 % m1 == 0):if (r0 % m1 != r1):return (0, 0)continueg, im = inv_gcd(m0, m1)u1 = m1//gif ((r1-r0) % g):return (0, 0)x = (r1-r0)//g % u1*im % u1r0 += x*m0m0 *= u1if r0 < 0:r0 += m0return (r0, m0)Q=int(input())for _ in range(Q):W,H,D,MX,MY,HX,HY,VX,VY=map(int,input().split())if VX==0:if MX!=HX:print("Miss")else:if VY>0:if MY>HY:if D*VY>=MY-HY:print("Hit")else:print("Miss")else:if D*VY>=2*(H-HY)+HY-MY:print("Hit")else:print("Miss")else:if MY>HY:if -D*VY>=2*HY+MY-HY:print("Hit")else:print("Miss")else:if -D*VY>=2*MY+HY-MY:print("Hit")else:print("Miss")continueif VY==0:if MY!=HY:print("Miss")else:if VX>0:if MX>HX:if D*VX>=MX-HX:print("Hit")else:print("Miss")else:if D*VX>=2*(W-HX)+HX-MX:print("Hit")else:print("Miss")else:if MX>HX:if -D*VX>=2*HX+MX-HX:print("Hit")else:print("Miss")else:if -D*VX>=2*MX+HX-MX:print("Hit")else:print("Miss")continueif VX<0:MX=W-MXHX=W-HXVX=-VXif VY<0:MY=H-MYHY=H-HYVY=-VYgg=gcd(VX,VY)if gg!=1:VX//=ggVY//=ggD*=ggL=[[MX,MY],[MX,2*H-MY],[2*W-MX,MY],[2*W-MX,2*H-MY]]flg=Falsefor [x,y] in L:GX=gcd(VX,2*W)GY=gcd(VY,2*H)if (x-HX)%GX!=0 or (y-HY)%GY!=0:continueNVX=VX//GXMSX=(x-HX)//GXNW=(2*W)//GXNVY=VY//GYMSY=(y-HY)//GYNH=(2*H)//GYINV_NVX=inv_mod(NVX,NW)INV_NVY=inv_mod(NVY,NH)MSX*=INV_NVXMSY*=INV_NVYMSX%=NWMSY%=NHV1=[MSX,MSY]V2=[NW,NH][r,m]=crt(V1,V2)if m!=0 and r<=D:flg=Trueif flg:print("Hit")else:print("Miss")