快進撃Atcoder#2
今回は、atcoder ABC086C - Traveling を解いた
使用したツール
・自らの脳みそ
・ネット記事↓
今回は、atcoder travelingの解答例を調べちゃった
TLE(処理時間オーバー)になった時に解答例を調べた
x,y座標の和と到達時間の偶奇が一致したら配列に0を入力するコードを書いたけど、それだと計算量が多くなると解答例を見て気づいた
だから、偶奇が一致しない時に結果にFalseを入力してもうそのあとは繰り返し処理を行わないようにした
全てがTrueである必要がある問題に関しては一つでもFalseが出たらその後の繰り返し処理は行わないようなコードにするのがいいんだきっと!
あと、到達時間よりx,y座標の和が大きいときもFalseを返すと思って進めていたんだけど、
この記事に書いてあるように
2
4 2 2
6 0 0
この場合でもYesを出力しちゃう(本当は到達できないのでFalse)
x,y座標の和の絶対値と到達時間を比べればいいんだとわかってその後ACを獲得した
解答例見ちゃったし今回は負けた感強い
以下,我が美しきコード
N = int(input())
list = [ list(map(int, input().split())) for i in range(N) ]
i = N-1
while i > 0:
list[i] = [x - y for (x, y) in zip(list[i], list[i-1])]
i = i-1
res = True
for i in range(N):
a = list[i][1] + list[i][2]
if a%2 != list[i][0]%2 or abs(a) > list[i][0]:
res = False
break
if res:
print("Yes")
else:
print("No")