結果

問題 No.3681 心の沸騰石
コンテスト
ユーザー Nanashi.
提出日時 2026-09-05 14:44:43
言語 Ruby
(4.0.6)
コンパイル:
ruby -w -c _filename_
実行:
ruby _filename_
結果
AC  
実行時間 51 ms / 2,000 ms
+ 938µs
コード長 1,616 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 516 ms
コンパイル使用メモリ 8,832 KB
実行使用メモリ 14,720 KB
最終ジャッジ日時 2026-09-05 14:45:08
合計ジャッジ時間 2,766 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge6_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 13
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.rb:5: warning: 'frozen_string_literal' is ignored after any tokens
Main.rb:30: warning: 'frozen_string_literal' is ignored after any tokens
Syntax OK

ソースコード

diff #
raw source code

# 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
0