はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC238のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。
A - Exponential or Quadratic
a-238.rb
n = gets.to_i
puts 2 ** n > n ** 2 ? "Yes" : "No"
B - Pizza
b-238.rb
gets
a = gets.split.map(&:to_i)
array = [360]
deg = 0
a.each do
deg += _1
array << deg % 360
end
array.sort!
ans = array.first
array.each_cons(2){ ans = [ans, _2 - _1].max}
puts ans
解説
最初に切れ込みが入る位置(0からの角度)を求め、array配列に格納した後昇順にソートします。そして、隣り合う要素の差(ピザの中心角)の最大値を更新していくことで答えを求めることができます。
C - digitnum
c-238.rb
n = gets.to_i
mod = 998244353
ans = 0
n.to_s.size.times do
m = [9 * (10 ** _1), n - (10 ** _1) + 1].min
ans += (m * (m + 1)) / 2
end
puts ans % mod
解説
(公式解説を参考にしました)
公式解説にあるようにN-10^(i-1)+1
を求めればいいのですが、それぞれの桁数に応じてf(N)=9*10^(i-1)
個あることがわかるので、これらのうち小さい方を使う必要があります。最後に、求めた総和を998244353
で割った余りを求めることで解くことができます。