結果
問題 | No.5 数字のブロック |
ユーザー | らっしー(raccy) |
提出日時 | 2014-12-23 12:52:22 |
言語 | Ruby (3.3.0) |
結果 |
AC
|
実行時間 | 104 ms / 5,000 ms |
コード長 | 2,566 bytes |
コンパイル時間 | 117 ms |
コンパイル使用メモリ | 7,552 KB |
実行使用メモリ | 12,672 KB |
最終ジャッジ日時 | 2024-11-17 22:15:55 |
合計ジャッジ時間 | 3,624 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 69 ms
12,160 KB |
testcase_01 | AC | 75 ms
12,160 KB |
testcase_02 | AC | 74 ms
12,160 KB |
testcase_03 | AC | 82 ms
12,672 KB |
testcase_04 | AC | 80 ms
12,672 KB |
testcase_05 | AC | 87 ms
12,672 KB |
testcase_06 | AC | 79 ms
12,544 KB |
testcase_07 | AC | 104 ms
12,544 KB |
testcase_08 | AC | 80 ms
12,544 KB |
testcase_09 | AC | 74 ms
12,160 KB |
testcase_10 | AC | 88 ms
12,672 KB |
testcase_11 | AC | 78 ms
12,544 KB |
testcase_12 | AC | 83 ms
12,544 KB |
testcase_13 | AC | 85 ms
12,544 KB |
testcase_14 | AC | 69 ms
12,160 KB |
testcase_15 | AC | 70 ms
12,160 KB |
testcase_16 | AC | 86 ms
12,672 KB |
testcase_17 | AC | 88 ms
12,672 KB |
testcase_18 | AC | 87 ms
12,544 KB |
testcase_19 | AC | 89 ms
12,544 KB |
testcase_20 | AC | 70 ms
12,288 KB |
testcase_21 | AC | 69 ms
12,288 KB |
testcase_22 | AC | 69 ms
12,288 KB |
testcase_23 | AC | 69 ms
12,288 KB |
testcase_24 | AC | 69 ms
12,160 KB |
testcase_25 | AC | 71 ms
12,288 KB |
testcase_26 | AC | 70 ms
12,288 KB |
testcase_27 | AC | 70 ms
12,160 KB |
testcase_28 | AC | 70 ms
12,160 KB |
testcase_29 | AC | 79 ms
12,416 KB |
testcase_30 | AC | 75 ms
12,288 KB |
testcase_31 | AC | 70 ms
12,288 KB |
testcase_32 | AC | 71 ms
12,288 KB |
testcase_33 | AC | 70 ms
12,160 KB |
コンパイルメッセージ
Main.rb:57: warning: assigned but unused variable - n Syntax OK
ソースコード
# coding: utf-8 # 無駄にオブジェクト指向 # ブロックのクラス class Block # 幅です。読み取り専用で取得できるようにします。 attr_reader :width # 初期値に幅を指定します。 def initialize(width) @width = width end end # 箱のクラス class Box # 初期値に幅を指定します。 def initialize(width) # 「空いている幅」です。 # 最初は空なので初期値の幅と同じです。 @empty_width = width # 箱に収めたブロックのリストです。 # 最初は空です。 @block_list = [] end # 箱にブロックをいれます。 # ブロックは箱に詰めていれてきます。 # もし、箱に収まれば true を返します。 # 箱からはみ出す場合は false を返します。 def put(block) # ブロックの幅が空きより以下なのかを調べます。 if @empty_width >= block.width # 箱に入るので、ブロック分空きを減らします。 @empty_width -= block.width # リストにブロックを追加します。 @block_list << block # 収まっているので true を返します。 return true else # 収まらないので false を返します。 return false end end # 箱に入っているブロックの数を返します。 def number_of_blocks # リストの数をそのまま返します。 return @block_list.size end end # 幅を表す L を整数として取得します。 l = gets.to_i # ブロックの個数を表す N を整数として取得します。 # ただし、Ruby ではこの n は使いません。 n = gets.to_i # 各ブロックの幅を表す Wi を整数のリストとして取得します。 w_list = gets.split.map(&:to_i) # 箱のオブジェクトを作ります。 box = Box.new(l) # ブロックのオブジェクトのリストを作ります。 block_list = w_list.map {|w| Block.new(w)} # 箱にブロックが一番はいるのは、ブロックを幅の小さい順から並べた場合です。 # なので、ブロックのリストを幅の小さい順に並び替えます。 block_list.sort! {|a, b| a.width <=> b.width} # 収まらなくなるまで、小さい順から箱に入れていきます。 block_list.each do |block| if box.put(block) # 箱に収まったので次へ next else # 箱に収まらなかったので終了 break end end # 最後に箱の中のブロックの数を出力します。 puts box.number_of_blocks