LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-09-25

abc86_1.png
abc86_2.png
abc86_3.png
abc86_4.png

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0