kotazon.com

虎太郎の備忘録

【AtCoder-Ruby】ABC095 B - Bitter Alchemy

問題文文字列 S が与えられます。 S のそれぞれの文字は英大文字または英小文字です。 S が次の条件すべてを満たすか判定してください。 - S の先頭の文字は大文字の A である。 - S の先頭から 3 文字目と末尾から 2 文字目の間(両端含む)に大文字の C がちょうど 1 個含まれる。 - 以上の A, C を除く S のすべての文字は小文字である。制約 4 ≤|S| ≤10(|S| は文字列 S の長さ) S のそれぞれの文字は英大文字または英小文字である 問題リンク

https://kotazon.hatenablog.com/entry/2019/05/22/064009

問題

問題文

パティシエの赤木さんは、「お菓子の素」という粉のみを材料として N 種類のドーナツを作ることができます。
これらのドーナツはドーナツ 1 、ドーナツ 2 、 . . . 、ドーナツ N と呼ばれます。 ドーナツ i ( 1 ≤ i ≤ N) を 1 個作るには、お菓子の素 m i グラムを消費する必要があります。 なお、 0.5 個など整数でない個数のドーナツを作ることはできません。 いま、赤木さんはお菓子の素を X グラム持っています。 これを使って、今夜のパーティーに向けて可能な限りたくさんのドーナツを作ることにしました。 ただし、来客の味の好みは様々なので、次の条件を守ることにしました。

  • N 種類のドーナツそれぞれを少なくとも 1 個は作る。

このとき、最大で何個のドーナツを作ることができるでしょうか?お菓子の素を使い切る必要はありません。 また、この問題の制約のもとでは、条件を守ることは必ず可能です。

制約

  • 2 ≤ N ≤ 100
  • 1 ≤ m i ≤ 1000
  • m1 + m2 + ... + mN ≤ X ≤ 10 ** 5
  • 入力中のすべての値は整数である。

問題リンク

考えたこと

別種類のものを1個づつ作り、その後は一番安いものを作り続ける

はじめに作ったもの(13:20)

N, X = gets.strip.split.map(&:to_i)
a = N.times.map { gets.strip.to_i }

c = a.size
sum = X - a.inject(:+)
m = a.min

while sum > 0
  break if sum < m
  sum -= m 
  c += 1
end

puts c

回答

もっとシンプルにできるので2回目作成(3:30)

N, X = gets.strip.split.map(&:to_i)
a = N.times.map { gets.strip.to_i }

puts N + ((X - a.inject(:+)) / a.min)

考察

ABC095 A - Something on It は、2:50 だったので、16:10 で AB 完了。