AtCoder Beginners Selectionの最後の問題の、ABC086C 「Traveling」の問題をPythonで解いています。
解説等で見かけるような、偶数と奇数の性質に着目するような美しい解きかたではなく、愚直にスタート地点から時間を進めるにつれて現在地点から上下左右に動かして、対象時間時に到着できているかどうかを判定する関数を作って問題をクリアしようとしました。
そして、以下のようなコードをとりあえず書き終わり、コードテストで確認したところ入力例全てをクリアできたので出来たと思い、コードを提出したところ全ての問題評価項目においてRE(実行時エラー)が表示されてしまいました。
愚直に上下左右全ての部分で配列に入れて調べようとしているので、メモリ制限を超えてしまう事や実行時間以内に終わらないという事だったら自分のアルゴリズムが明らかに悪いと理解できるのですが、REで入力例はちゃんと全部できているだけに、while等改めて確認したのですが、やはりどこが間違えてしまっているのか原因が分かりませんでした。
どこが原因でエラーが出るのかご指摘お願いしたいです。
python
1 2N = int(input().rstrip()) 3 4def check(pre_t, t, sx, sy, gx, gy): 5 # 以前の状態から上下左右動かして初期設定する 6 candidate = [[pre_t, sx + 1, sy], [pre_t, sx - 1, sy], [pre_t, sx, sy + 1], [pre_t, sx, sy - 1]] 7 8 # TrueかFalseを返す 9 while True: 10 t2, now_x, now_y = candidate.pop(0) 11 12 # time < tのときまだちゃんと到達できるか調査中の段階なので上下左右再び追加する 13 if t2 < t: 14 candidate.append([t2 + 1, now_x + 1, now_y]) 15 candidate.append([t2 + 1, now_x - 1, now_y]) 16 candidate.append([t2 + 1, now_x, now_y + 1]) 17 candidate.append([t2 + 1, now_x, now_y - 1]) 18 elif t2 == t: 19 if now_x == gx and now_y == gy: 20 return True 21 22 if len(candidate) == 0: 23 return False 24 25# 原点からスタートするための初期設定 26pre_t, sx, sy = 1, 0, 0 27 28for i in range(N): 29 t, gx, gy = map(int, input().rstrip().split(" ")) 30 # もしちゃんとただりつけるのであれば 31 if check(pre_t, t, sx, sy, gx, gy): 32 # 次の準備をする 33 pre_t = t + 1 34 sx = gx 35 sy = gy 36 else: 37 print("No") 38 break 39# 一度もbreakしなかったら成功したという事なので、その時のみ以下の処理をおこなう 40else: 41 print("Yes") 42 43 44 45 46
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/03 03:48
退会済みユーザー
2021/09/03 03:53
2021/09/03 04:02