ABC297 E問題 Kth Takoyaki Set

atcoder.jp

安いほうから順に  K 個を選ぶことを考えてみます。
各種類を1つだけ買った時の価格 A_iを集合 Sに加えます。
集合 Sの中から一番安い価格を取り出します。
その価格 cに、さらに1つ追加で買うときの価格 c+A_i Sに加えます。
 S は同じ値の重複を許さないようにして、 Sから一番安い価格を取り出し、一つ追加した価格を加えることを繰り返したとき、 K回目に取り出した価格が求める答えです。


コード例 (Julia)

using DataStructures

function solve()

  # 入力
  readInts() =  parse.(Int,split(readline()))
  readInt()  =  parse(Int,readline())

  N,K = readInts()
  A = readInts()

  s = SortedSet{Int}()

  for i = 1:N
    push!(s,A[i])
  end

  for i = 1:K-1
    c = pop!(s)
    for j = 1:N
      push!(s,c+A[j])
    end
  end

  println(pop!(s))

end  # function solve

# main
solve()