0
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 ABC278(A, B, C, D)を解いてみた

Posted at

はじめに

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

A - Shift

a-278.rb
n, k = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
puts n <= k ? ([0] * n).join(" ") : (a[k,n] + [0] * k).join(" ")

解説

問題文を言い換えると、「先頭からK個要素を取り除き、後ろに0をK個追加する」となります。なお、N<=Kの場合はN個の0を要素としてもつ配列が答えとなります。

B - Misjudge the Time

b-278.rb
h, m = gets.split.map(&:to_i)
loop do
  a, b = h / 10, h % 10
  c, d = m / 10, m % 10
  if a * 10 + c < 24 && b * 10 + d < 60
    puts "#{h} #{m}"
    exit
  end
  m += 1
  if m == 60
    m = 0
    h += 1
  end
  if h == 24
    h = 0
  end
end

解説

問題文の通りに実装すればOKです。なお、時間は24になったら0でリセット、分は60になったら0にリセットして時間をインクリメントする必要があります。

C - FF

c-278.rb
n, q = gets.split.map(&:to_i)
hash = {}
q.times do
    t, a, b = gets.split.map(&:to_i)
    case t
    when 1
        hash[[a,b]] = true
    when 2
        hash[[a,b]] = false
    when 3
        puts hash[[a, b]] && hash[[b, a]] ? "Yes" : "No"
    end
end

他の方の提出結果を見てみたところ、以下のような方法もあるようでこちらの方が高速です。

別解
n, q = gets.split.map(&:to_i)
hash = {}
q.times do
  t, a, b = gets.split.map(&:to_i)
  case t
  when 1
    hash[a] ||= {}
    hash[a][b] = true
  when 2
    hash[a][b] = false if hash[a]
  when 3
    puts hash[a] && hash[a][b] && hash[b] && hash[b][a] ? "Yes" : "No"
  end
end

解説

連想配列を使って問題文の通りに実装することで十分間に合います。

メモ
||=:偽か未定義なら代入

D - All Assign Point Add

d-278.rb
gets
a = gets.split.map(&:to_i)
q = gets.to_i
hash = {}
a.each.with_index { |factor, i| hash[i + 1] = factor }

q.times do
  t, a, b = gets.split.map(&:to_i)
  case t
  when 1
    hash = Hash.new(a)
  when 2
    hash[a] += b
  when 3
    puts hash[a]
  end
end

解説

t=1のときの要素をすべてaに変えるという操作は、Hash.new(a)を使うことで実装することができます。

終わりに

クエリを使う問題は結構好きですね。

0
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
0
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?