【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