結果

問題 No.2564 衝突予測
ユーザー ngng628ngng628
提出日時 2023-12-02 16:00:51
言語 Crystal
(1.11.2)
結果
AC  
実行時間 102 ms / 2,000 ms
コード長 1,315 bytes
コンパイル時間 16,848 ms
コンパイル使用メモリ 296,380 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-09-26 19:41:36
合計ジャッジ時間 15,113 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 1 ms
5,248 KB
testcase_02 AC 1 ms
5,376 KB
testcase_03 AC 98 ms
5,376 KB
testcase_04 AC 98 ms
5,376 KB
testcase_05 AC 102 ms
5,376 KB
testcase_06 AC 99 ms
5,376 KB
testcase_07 AC 96 ms
5,376 KB
testcase_08 AC 99 ms
5,376 KB
testcase_09 AC 96 ms
5,376 KB
testcase_10 AC 96 ms
5,376 KB
testcase_11 AC 99 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

class Car
  property x : Int64
  property y : Int64
  property d : Char

  def initialize(@x : Int64, @y : Int64, @d : Char)
  end
end

def distance(c1, c2)
  (c2.x - c1.x).abs + (c2.y - c1.y).abs
end

t = read_line.to_i64
ans = (1..t).map {
  cars = Array.new(2) { x, y, d = read_line.chomp.split; Car.new(x.to_i64, y.to_i64, d.chars[0]) }
  next false if cars[0].d == cars[1].d
  if cars.any?(&.d.==('L')) && cars.any?(&.d.==('R'))
    cars.swap(0, 1) unless cars[0].d == 'L'
    cars[0].y == cars[1].y && cars[0].x > cars[1].x
  elsif cars.any?(&.d.==('U')) && cars.any?(&.d.==('D'))
    cars.swap(0, 1) unless cars[0].d == 'U'
    cars[0].x == cars[1].x && cars[0].y < cars[1].y
  else
    cars.swap(0, 1) unless {'L', 'R'}.includes?(cars[0].d)
    if cars[0].x > cars[1].x
      d = (cars[0].x - cars[1].x).abs
      cars[0].x -= 2_i64 * d
      cars[0].d = cars[0].d == 'L' ? 'R' : 'L'
    end
    if cars[0].y > cars[1].y
      d = (cars[0].y - cars[1].y).abs
      cars[0].y -= 2_i64 * d
      cars[1].d = cars[1].d == 'D' ? 'U' : 'D'
    end

    collision_point = Car.new(cars[1].x, cars[0].y, '_')
    d0 = distance(cars[0], collision_point)
    d1 = distance(cars[1], collision_point)

    d0 == d1 && cars[0].d == 'R' && cars[1].d == 'D'
  end
}.map { |elem| elem ? "Yes" : "No" }.join('\n')

puts ans
0