# frozen_string_literal: true # This file is expanded by nanacl. main = -> do # ================================================================= # frozen_string_literal: true # require "nanacl/bsearch_right" # (expanded: L29) in_r, in_p, in_q = gets.chomp.split.map(&:to_i) in_a, in_b, in_c, in_d = gets.chomp.split.map(&:to_i) ans = (0..(10**10)).bsearch_right do |n| change_budget = in_r - in_p * n next false if change_budget < 0 missing_a = n - in_a missing_b = n - in_b missing_c = n - in_c unuseds = [-missing_a, -missing_b, -missing_c, in_d].sum { |c| [c, 0].max } missings = [missing_a, missing_b, missing_c].sum { |c| [c, 0].max } missings <= change_budget / in_q && unuseds >= missings end puts ans end # -------------------------------------------------------------------------- # === dependencies ------------------------------------------------------------- # == nanacl/bsearch_right from main -------------------------------------------- # frozen_string_literal: true class Array def bsearch_right(&) index = bsearch_index_right(&) index && self[index] end def bsearch_index_right(&block) right = bsearch_index { |elem| !block.call(elem) } if right.nil? size - 1 elsif right == 0 nil else right - 1 end end end class Range def bsearch_right(&block) right = bsearch { |elem| !block.call(elem) } if right.nil? last elsif right == first nil else right - 1 end end end # ============================================================================== main.call