AtCoder RC089 C: Traveling
問題
https://arc089.contest.atcoder.jp/tasks/arc089_a
解法
時刻が1進む毎に上下左右のいずれかに1進めるので、次の場所に進むことを考えると
・次の場所との距離(X座標とY座標の差の絶対値の和)が時刻の差に等しい
がまず最もシンプルな条件になります。
また、時刻の差が距離より大きい場合は、一旦次の場所に着いてから「隣の座標に移って戻る」を繰り返せば良いので
・次の場所との距離(X座標とY座標の差の絶対値の和)と時刻の差が正の偶数である
というのがもう一つの条件になります。
上記の条件に合うかどうかを順次チェックしていけば解けます。
実装
t = Array.new x = Array.new y = Array.new t[0] = x[0] = y[0] = 0 STDIN.gets STDIN.each_line do |line| n = line.chomp.split(' ') t.push(n[0].to_i) x.push(n[1].to_i) y.push(n[2].to_i) end for i in 0..t.size-2 dist = (x[i+1] - x[i]).abs + (y[i+1] - y[i]).abs if dist > (t[i+1] - t[i]) || (t[i+1] - t[i] - dist) % 2 == 1 then puts "No" exit end end puts "Yes"