問題
C – 浮気調査
ループの else 節
Python では、ループに else 節を設定することができ、「ループでbreakしなかったときにこの処理を行う」という処理を、フラグ変数を使わずに行えます。
4.4. break 文と continue 文とループの else 節
小数演算による誤差
小数演算で比較を行う際には、誤差で誤る可能性があるので注意が必要。
回答
import sys
txa, tya, txb, tyb, T, V = map(int, input().split())
n = int(input())
lst_pos_girl = [list(map(int, input().split())) for _ in range(n)]
# スライドより誤差対策
eps = sys.float_info.epsilon
MAX_DIST = T * V + eps
pos_t_start = [txa, tya]
pos_t_goal = [txb, tyb]
def distance(a, b):
'''
a, bの距離を求める。
'''
x_a, y_a = (a[0], a[1])
x_b, y_b = (b[0], b[1])
distance = ((x_b - x_a)**2 + (y_b - y_a)**2) ** (1/2)
return distance
for pos_girl in lst_pos_girl:
dist_start_to_girl = distance(pos_t_start, pos_girl)
dist_girl_to_goal = distance(pos_girl, pos_t_goal)
if MAX_DIST >= dist_start_to_girl + dist_girl_to_goal:
print('YES')
break
else:
print('NO')