POH vol.1挑戦


新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1をやってなかったので挑戦。

# 問題読み込み
m,n = gets.chomp.split.map &:to_i
items = m.times.map { gets.chomp.to_i }
cprices = n.times.map {gets.chomp.to_i }

## 前処理
# 同じ価格の商品をグループ化
item_count = items.group_by {|v| v}.each_with_object({}) {|(k,v),o|
    o[k] = v.size
}
# 価格をソートしておく
item_price = item_count.keys.sort

cprices.each {|target_price|
    # キャンペーン価格を下げながら検査
    puts target_price.downto(10).find {|down_price|
        item_price.select {|p|
            p < down_price
        }.find {|p|
            e = item_count[down_price - p] || 0
            p * 2 == down_price ? e > 1 : e > 0 # 同じ価格の商品2種類の場合の対処
        }
    } || 0
}