import math def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]); idx +=1 W = float(input[idx]); idx +=1 X = [] Y = [] R = [] V = [] A = [] for _ in range(N): x = float(input[idx]); idx +=1 y = float(input[idx]); idx +=1 r = float(input[idx]); idx +=1 v = float(input[idx]); idx +=1 a = float(input[idx]); idx +=1 X.append(x) Y.append(y) R.append(r) V.append(v) A.append(a) INF = float('inf') dp = [[INF]*N for _ in range(1<= current_time for sushi v Xv_val = X[v] Yv_val = Y[v] Rv_val = R[v] Vv_val = V[v] Av_val = A[v] def xvt(t): return Xv_val + Rv_val * math.cos( (Vv_val * t + Av_val) * math.pi / 180 ) def yvt(t): return Yv_val + Rv_val * math.sin( (Vv_val * t + Av_val) * math.pi / 180 ) left = current_time right = current_time # Check if left is already feasible d_left = math.hypot(xu - xvt(left), yu - yvt(left)) if d_left <= W * (left - current_time): t_candidate = left else: # Find upper bound step = 1e-8 right = left + step found = False for _ in range(100): xr = xvt(right) yr = yvt(right) d = math.hypot(xu -xr, yu -yr) if d <= W*(right - current_time): found = True break step *= 2 right += step if not found: continue # should not happen # Binary search for _ in range(100): mid = (left + right)/2 xmid = xvt(mid) ymid = yvt(mid) d_mid = math.hypot(xu -xmid, yu -ymid) if d_mid <= W*(mid - current_time): right = mid else: left = mid t_candidate = right new_mask = mask | (1<