1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RubyでAtCoder ABC270(A, B, C)を解いてみた

Posted at

はじめに

Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC270のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

A - 1-2-4 Test

a-270.rb
a, b = gets.split.map(&:to_i)
puts a | b

解説

どちらか一方が解いていればいいので、bit演算子のORを使うことで実装することができます。

B - Hammer

b-270.rb
x, y, z = gets.split.map(&:to_i)
x, y, z = -x, -y, -z if y < 0
if x < y
  puts x.abs
else
  if y < z
    puts -1
  else
    puts z.abs + (x - z).abs
  end
end

解説

(公式解説を参考にしました)

yを正に揃えることで、場合分けの数を減らしています。

C - Simple path

c-270.rb
n, x, y = gets.split.map(&:to_i)
array = Array.new(n + 1) { [] }
(n - 1).times do
  u, v = gets.split.map(&:to_i)
  array[u] << v
  array[v] << u
end

searched = Array.new(n + 1, false)
searched[x] = true
stack = [x]

parent = Array.new(n + 1, 0)

while node = stack.pop
  array[node].each do |i|
    next if searched[i]
    searched[i] = true
    stack << i
    parent[i] = node
  end
end

ans = [y]
while ans[-1] != x
  ans << parent[ans[-1]]
end
puts ans.reverse.join(" ")

解説

DFSで深さ優先探索しています。最後にyを親、xを子としてyからxに辿り着けるまでans配列に要素を格納していきます。

終わりに

B問題は自力で解いたのだと

x, y, z = gets.split.map(&:to_i)
if x == 0
  p 0
elsif x > 0
  if x < y || y < 0
    p x
  else
    if y < z
      p -1
    else
      if z < 0
        p 2 * z.abs + x
      else
        p x
      end
    end
  end
else
  if x > y || y > 0
    p x.abs
  else
    if z < y
      p -1
    else
      if z > 0
        p 2 * z.abs + x.abs
      else
        p x.abs
      end
    end
  end
end

こんな感じですごく長くなってしまいました。yを正に揃えるいうことを思いつけなかったのが悔しいです...

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?