[Python] ABC010 C

問題

C – 浮気調査

ループの else 節

Python では、ループに else 節を設定することができ、「ループでbreakしなかったときにこの処理を行う」という処理を、フラグ変数を使わずに行えます。

4.4. break 文と continue 文とループの else 節

小数演算による誤差

小数演算で比較を行う際には、誤差で誤る可能性があるので注意が必要。

Pythonの計算機イプシロン

回答

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')