【AtCoder:13回目】AtCoder Beginner Contest 136の振り返り(Ruby)

【目次】

【本題】

振り返り

今回は 8/4(日)に開催されたAtCoder Beginner Contest 136の振り返りを行います。

AtCoder Beginner Contest 136 - AtCoder

今回は2問しか回答できませんでした・・・弱過ぎ・・・

レーティング変動なし

A - Transfer

問題文 水を入れる容器が 2 つあります。

容器 1 には水を A ミリリットルまで入れることができ、水が B ミリリットル入っています。

容器 2 には水が C ミリリットル入っています。

容器 2 から容器 1 に入るだけ水を移します。

容器 2 の中には何ミリリットルの水が残るでしょうか。

制約 入力は全て整数である。 1 ≤ B ≤ A ≤ 20 1 ≤ C ≤ 20

私の回答はこちら。

a,b,c = gets.split.map(&:to_i)
puts a-b >= c ? 0 : c-(a-b)

maxメソッドを使う方法もありましたね

a,b,c = gets.split.map(&:to_i)
puts [0,c-a+b].max

B - Uneven Numbers

問題文 整数 N が与えられます。 N 以下の正の整数のうち、(先頭に 0 をつけずに十進法で表記したときの) 桁数が奇数であるようなものの個数を求めてください。

制約 1 ≤ N ≤ 10 5

桁数は文字列に変換すれば、文字数として簡単に導き出せます。

数もそこまで多くないので、一つづつ判定できます。

以下が私の回答です。

n = gets.to_i
 
count = 0
 
[*1..n].each do |int|
  count += 1 if int.to_s.size.odd?
end
 
puts count

全探索じゃない方法であれば、以下の通りです。

N = gets.chomp
case N.length
when 1
  puts N.to_i
when 2
  puts 9
when 3
  puts N.to_i - 99 + 9
when 4
  puts 999 - 99 + 9
when 5
  puts N.to_i - 9999 + 909
when 6
  puts 99999 - 9999 + 909
end

C - Build Stairs

問題文 左右一列に N 個のマスが並んでおり、左から i 番目のマスの高さは H i です。

あなたは各マスについて 1 度ずつ次のいずれかの操作を行います。

マスの高さを 1 低くする。 何もしない。 操作をうまく行うことでマスの高さを左から右に向かって単調非減少にできるか求めてください。

制約 入力は全て整数である。 1 ≤ N ≤ 10 5 1 ≤ H i ≤ 10 9

以下のコードで全探索を試みましたが、一部のテストが通りません・・・

n = gets.to_i
h = gets.split(' ').map(&:to_i)

min_hight = 0
before_hight = 0
h.each do |hight|
  if before_hight <= hight
    before_hight = hight
  elsif before_hight - 1 == hight && before_hight - 1 >= min_hight
    min_hight = before_hight - 1
    before_hight = hight
  else
    return puts 'No'
  end
end

puts 'Yes'

returnを使わなければ、通りました・・・

なんじゃそりゃ・・・

n = gets.to_i
h = gets.split(' ').map(&:to_i)
 
min_hight = 0
before_hight = 0
result = 'Yes'
h.each do |hight|
  if before_hight <= hight
    before_hight = hight
  elsif before_hight - 1 == hight && before_hight - 1 >= min_hight
    min_hight = before_hight - 1
    before_hight = hight
  else
    result =  'No'
  end
end
 
puts result