ABC86 C - Traveling で自分の成長を感じた





t,x,y を受け取る度に NG の条件に引っかからないか
見てあげればいい。

とりあえず書いたら、
For のネストも不要だったので、
たぶん行けると踏んだ。

Traveling.py
from sys import exit
N = int(input())
rear = 0
x0,y0 = 0,0
for _ in range(N):
    curent,x1,y1 = map(int,input().split())
    if curent-rear == abs(x1-x0)+abs(y1-y0):
        x0,y0 = x1,y1
        pass
    elif curent-rear < abs(x1-x0)+abs(y1-y0):
        print("No")
        exit()
    else:#<= 注意!
        diff = (curent-rear) - (abs(x1-x0)+abs(y1-y0))
        if diff%2 != 0:
            print("No")
            exit()
    rear = curent
print("Yes")

上記で一応通ったけど。たぶん上記のコードには問題がある。
コメントにあるように "注意!" の個所を通過する場合、
それが連続する可能性もあるので x0,y0 = x1,y1 を追記すべきかも。
※それっていうのは。超過した分を近端で往復することで帳消しにする座標 の事。

Traveling.py
from sys import exit
N = int(input())
rear = 0
x0,y0 = 0,0
for _ in range(N):
    curent,x1,y1 = map(int,input().split())
    if curent-rear == abs(x1-x0)+abs(y1-y0):
        x0,y0 = x1,y1
        pass
    elif curent-rear < abs(x1-x0)+abs(y1-y0):
        print("No")
        exit()
    else:
        diff = (curent-rear) - (abs(x1-x0)+abs(y1-y0))
        if diff%2 != 0:
            print("No")
            exit()
        else:
            x0, y0 = x1, y1 # <= もし超過した分を近端で往復することで帳消しにする座標が連続する場合は
                            #    ちゃんと座標を保存して次に行かないと WA になる。
    rear = curent
print("Yes")

成長を感じた筈だったが、
未熟さを感じた問題でもあった(笑)