結果
問題 | No.571 3人兄弟(その2) |
ユーザー | muu16 |
提出日時 | 2018-11-25 22:49:23 |
言語 | Ruby (3.3.0) |
結果 |
AC
|
実行時間 | 90 ms / 2,000 ms |
コード長 | 2,729 bytes |
コンパイル時間 | 211 ms |
コンパイル使用メモリ | 7,680 KB |
実行使用メモリ | 12,288 KB |
最終ジャッジ日時 | 2024-06-07 15:46:28 |
合計ジャッジ時間 | 2,350 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 88 ms
12,288 KB |
testcase_01 | AC | 87 ms
12,160 KB |
testcase_02 | AC | 87 ms
12,032 KB |
testcase_03 | AC | 89 ms
12,160 KB |
testcase_04 | AC | 87 ms
12,160 KB |
testcase_05 | AC | 89 ms
12,288 KB |
testcase_06 | AC | 88 ms
12,288 KB |
testcase_07 | AC | 90 ms
12,032 KB |
testcase_08 | AC | 88 ms
12,160 KB |
testcase_09 | AC | 90 ms
12,032 KB |
testcase_10 | AC | 88 ms
12,288 KB |
testcase_11 | AC | 89 ms
12,032 KB |
testcase_12 | AC | 88 ms
12,288 KB |
testcase_13 | AC | 88 ms
12,288 KB |
コンパイルメッセージ
Syntax OK
ソースコード
a = gets.chomp.split(" ") b = gets.chomp.split(" ") c = gets.chomp.split(" ") # そしてmapメソッドを使って配列の文字列を数値にします aa = a.map(&:to_i) bb = b.map(&:to_i) cc = c.map(&:to_i) # aa[170, 60] # bb[180, 70] # cc[160, 50] # ↑それぞれ今この様な配列になっているから # これをhashにします h = { "A" => aa[0], "B" => bb[0], "C" => cc[0]} w = { "A" => aa[1], "B" => bb[1], "C" => cc[1]} #こんな感じになる # h = { "A" => 170, "B" => 180, "C" => 160} # w = { "A" => 60, "B" => 70, "C" => 50} # 次にsortメソッドを使ってhashの値を高いもん順にならべかえる # 身長の高い順 hh = h.sort { |(key1, val1),(key2, val2)| val2 <=> val1 } # こんな感じ[["B", 180], ["A", 170], ["C", 160]] # 次は体重の軽い順にsortする ww = w.sort { |(key1, val1),(key2, val2)| val1 <=> val2 } # こんな感じ[["C", 50], ["A", 60], ["B", 70]] # 体重よりも身長の方が優れている優先度が高いから # 身長が高い人に点数を多く与えてあげる # eachメソッドを使って1位の人に30点をあげる # そしてそこから身長が低くなるにつれて点数を # 10点ずつ低くする計算式を作る #lankにはまず1位の人に30点を上げたいから30を代入して上げます lank = 30 #previousには前回の人の値が入る #けど最初の人は前回の人がいないから初期値として #0を入れといて上げます previous = 0 score = {"A" => 0, "B" => 0, "C" => 0} hh.each { |key, val| if previous > val then # if文がfalseになる様に0を入れておく lank -= 10 # 前回より小さいならlank(点数)を下げる # 最初は30点入っている end previous = val score[key] = lank } # 150 # 140 # 150 # {"A"=>30, "B"=>20, "C"=>30} lank2 = 4 #previousには前回の人の値が入る #けど最初の人は前回の人がいないから初期値として #0を入れといて上げます previous2 = 0 score2 = {"A" => 0, "B" => 0, "C" => 0} ww.each { |key, val| if previous2 < val then # if文がfalseになる様に0を入れておく lank2 -= 1 # 前回より小さいならlank(点数)を下げる # 最初は30点入っている end previous2 = val score2[key] = lank2 } # h1 = {a:1, b:2} # h2 = {b:3, c:4} # p h1.merge(h2){|key, v0, v1| # v0 + v1 # キーが重複していた場合は2つの値を加算する # } #=> {:a=>1, :b=>5, :c=>4} score3 = score.merge(score2){|key, v0, v1| v0 + v1 } score4 = score3.sort { |(key1, val1),(key2, val2)| val2 <=> val1 } # [["C", 31], ["A", 22], ["B", 13]] puts score4[0][0] puts score4[1][0] puts score4[2][0]