Problem p03457 (python)

Fixed submission:
N = int(input())

t_b = x_b = y_b = 0 # 直前の時刻と位置保存用

def dist(x, x_b, y, y_b):
    return abs(x-x_b) + abs(y-y_b)

miss_flg = 0

for i in range(N):
    t, x, y = map(int, input().split())
    if dist(x, x_b, y, y_b) > t - t_b or ((t - t_b) + dist(x, x_b, y, y_b))% 2 == 1: # 到達不能もしくは距離と残り時間の偶奇が不一致
        miss_flg = 1
    t_b, x_b, y_b = t, x, y

print("Yes" if miss_flg == 0 else "No")

Buggy submission (verdict: Runtime Error):
N_input = int(input())
t_input = []
x_input = []
y_input = []

for _ in range(N_input):
    t, x, y = map(int, input().split())
    t_input.append(t)
    x_input.append(x)
    y_input.append(y)

def can_reach(t_now, n_now, x_now, y_now): # 残り時間で到達可能かチェック
    distance = abs(x_input[n_now] - x_now) + abs(y_input[n_now] - y_now)
    if distance <= t_input[n_now] - t_now and (distance + (t_input[n_now] - t_now))%2 == 0: # 到達可能圏内かつ距離と残り時間の偶奇が一致
        return True
    else:
        return False

def rest_travel(t_now, n_now, x_now, y_now): # 現在時刻t、通過済チェックポイント数n、現在位置x, y
    if t_now == max(t_input): # ゴール
        print("Yes")
        exit()
    elif can_reach(t_now, n_now, x_now, y_now):
        rest_travel(t_input[n_now+1], n_now+1, x_input[n_now+1], y_input[n_now+1])
    else: # 到達不可
        print("No")
        exit()

rest_travel(0,0,0,0)

Buggy submission (verdict: Runtime Error):
N_input = int(input())
t_input = []
x_input = []
y_input = []

for _ in range(N_input):
    t, x, y = map(int, input().split())
    t_input.append(t)
    x_input.append(x)
    y_input.append(y)

def can_reach(t_now, n_now, x_now, y_now): # 残り時間で到達可能かチェック
    distance = abs(x_input[n_now] - x_now) + abs(y_input[n_now] - y_now)
    if distance <= t_input[n_now] - t_now and (distance + (t_input[n_now] - t_now))%2 == 0: # 到達可能圏内かつ距離と残り時間の偶奇が一致
        return True
    else:
        return False

def rest_travel(t_now, n_now, x_now, y_now): # 現在時刻t、通過済チェックポイント数n、現在位置x, y
    if t_now == max(t_input): # ゴール
        print("Yes")
        exit()
    elif can_reach(t_now, n_now, x_now, y_now):
        rest_travel(t_input[n_now+1], n_now+1, x_input[n_now+1], y_input[n_now+1])
    else: # 到達不可
        return

rest_travel(0,0,0,0)
print("No")

Buggy submission (verdict: Runtime Error):
N_input = int(input())
t_input = []
x_input = []
y_input = []

for _ in range(N_input):
    t, x, y = map(int, input().split())
    t_input.append(t)
    x_input.append(x)
    y_input.append(y)


def can_reach(t_now, n_now, x_now, y_now): # 残り時間で到達不可能な距離でないかチェック
    distance = abs(x_input[n_now] - x_now) + abs(y_input[n_now] - y_now)
    if distance <= t_input[n_now] - t_now and (distance + (t_input[n_now] - t_now))%2 == 0: # 到達可能圏内かつ距離と残り時間の偶奇が一致
        return True
    else:
        return False

def rest_travel(t_now, n_now, x_now, y_now): # 現在時刻t、通過済チェックポイント数n、現在位置x, y
    if t_now == max(t_input): # ゴール
        print("Yes")
        exit()
    elif can_reach(t_now, n_now, x_now, y_now):
        if t_input[n_now] == t_now+1: # 次の移動で目標地点に到着している必要あり
            rest_travel(t_now+1, n_now+1, x_input[n_now], y_input[n_now])
        else: # ゴールしておらず、次の移動で目標地点に到着している必要がない
            rest_travel(t_now+1, n_now, x_now+1, y_now)
            rest_travel(t_now+1, n_now, x_now, y_now+1)
            rest_travel(t_now+1, n_now, x_now-1, y_now)
            rest_travel(t_now+1, n_now, x_now, y_now-1)
    else: # 到達不可
        return

rest_travel(0,0,0,0)
print("No")

Buggy submission (verdict: Runtime Error):
N_input = int(input())
t_input = []
x_input = []
y_input = []

for _ in range(N_input):
    t, x, y = map(int, input().split())
    t_input.append(t)
    x_input.append(x)
    y_input.append(y)

def rest_travel(t_now, n_now, x_now, y_now): # 現在時刻t、通過済チェックポイント数n、現在位置x, y
    if t_now == max(t_input): # ゴール
        print("Yes")
        exit()
    elif t_input[n_now] == t_now+1:  # 次の移動で目標地点に到着している必要あり
        if abs(x_input[n_now] - x_now) + abs(y_input[n_now] - y_now) == 1:  # 次の地点との距離が1なら到達可能
            rest_travel(t_now+1, n_now+1, x_input[n_now], y_input[n_now])
        else: # 到達不可。探索終了
            return
    else: # ゴールしておらず、次の移動で目標地点に到着している必要がない
        rest_travel(t_now+1, n_now, x_now+1, y_now)
        rest_travel(t_now+1, n_now, x_now, y_now+1)
        rest_travel(t_now+1, n_now, x_now-1, y_now)
        rest_travel(t_now+1, n_now, x_now, y_now-1)

rest_travel(0,0,0,0)
print("No")