【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 完了。