q=gets.to_i q.times{ w,h,d,mx,my,hx,hy,vx,vy=gets.split.map(&:to_i) # vxが0だと下解法の式が成り立たないのでxy軸入れ替え if vx==0 w,h=h,w mx,my=my,mx hx,hy=hy,hx vx,vy=vy,vx end gcd=vx.abs.gcd(vy.abs) vx/=gcd vy/=gcd d*=gcd pointcnt=[d,(w+1)*(h+1)*4].min # 弾丸が通る整数座標数 wcnt=((hx+vx*d)/w).abs # 弾丸が通るx軸方向の室数 # 2つのうちループ数が少なくなる解法で解く # pointcntはwに比例、wcntはwに反比例なのでどちらかが大きければ逆は小さいはず # トレードオフの真ん中をつかれるテストケースだと時間制約に間に合わなさそう・・・? puts (if pointcnt0?(hx..hx+vx*d):(hx+vx*d..hx) #弾丸が通るx軸範囲 (vx>0?(0..wcnt):(-wcnt..0)).any?{|i| ansx=i*w+(i%2==0?mx:(w-mx)) # y=(vy/vx)(x-hx)+hy expecty=vy.quo(vx)*(ansx-hx)+hy hn=expecty.to_i/h expecty==(hn*h)+(hn%2==0?my:(h-my))&&(xr===ansx) } end)?"Hit":"Miss" }