はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC262のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。
A - World Cup
a-262.rb
y = gets.to_i
a = y % 4
puts y + [2, 1, 0, 3][a]
解説
テストケースから分かるように答えはyに[2,1,0,3]のyを4で割った余りのインデックスに対応する要素を足したものになります。
B - Triangle (Easier)
b-262.rb
n, m = gets.split.map(&:to_i)
array = Array.new(n + 1) { Array.new(n + 1, false) }
m.times do
u, v = gets.split.map(&:to_i).sort
array[u][v] = true
array[v][u] = true
end
ans = 0
for i in 1..n - 2
for j in i + 1..n - 1
for k in j + 1..n
ans += 1 if array[i][j] && array[j][k] && array[k][i]
end
end
end
puts ans
解説
Nが100以下と小さいため、3重ループを回して全探索することができます。
C - Min Max Pair
c-262.rb
n = gets.to_i
a = gets.split.map(&:to_i)
count = 0
a.each_with_index do|i, j|
count += 1 if i == j + 1
end
ans = (count * (count - 1)) / 2
n.times do |i|
ans += 1 if a[i] > i + 1 && a[a[i] - 1] == i + 1
end
puts ans
解説
(公式解説を参考にしました)
a_i=iかつa_j=j
a_i=jかつa_j=i
のいずれかが成り立つことを利用することで答えを求めることができます。