【ABC086 C】「Traveling」を解く【Python3】

「AtCoder」解説一覧へ

AtCoder過去問精選10問まとめへ

二次元平面上で旅行をしようとしているシカのAtCoDeerくんのプランが、実行可能かどうか判定する問題です。

提出
n = int(input())
txy=[list(map(int,input().split())) for _ in range(n)]
p = [0,0,0]

for i in range(n):
    step = abs(txy[i][1]-p[1])+abs(txy[i][2]-p[2])
    time = txy[i][0]-p[0]
    if time>=step and (time-step)%2 == 0:
        p = txy[i]
        continue
    else:
        print("No")
        exit(0)

print("Yes")

入力したti , xi, yi は二重のリストにしています。

最初は、時刻 0 に 点 (0,0)にいるため、要素が0のリストpを作成します。

時刻 ti にいる点(xi, yi)が、一つ前の ti-1 の点(xi-1, yi-1)から、どのくらい進んだのかを計算して step に入れます。abs() は絶対値を返します。

その間に経過した時間 time は「ti – ti-1」となります。

時間が1進むごとに、どれかの方向に1しか進めないため、プランが実行可能であるには、「time>=step」となる必要があります。

また、「その場にとどまることは出来ない」という条件から、時間 time が偶数であれば、進んだ step も偶数でなくてはいけないため( time が奇数の場合には step も奇数)、「 (time-step)%2 == 0」も、必須条件です。

この二つを満たしたものであれば、実行可能ですので、リストpに今の「ti, xi, yi」を入れて、ループ処理を続けます。

どちらか一方でも満たさない場合には、実現不可能なので「No」を出力して、プログラムを終了させます。

【ABC086】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です