LoginSignup
0
0

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

Posted at

はじめに

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で割った余りを求めることで解くことができます。

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