結果

問題 No.15 カタログショッピング
コンテスト
ユーザー letrangerjp
提出日時 2017-05-27 01:38:40
言語 Ruby
(4.0.2)
コンパイル:
ruby -w -c _filename_
実行:
ruby _filename_
結果
AC  
実行時間 148 ms / 5,000 ms
コード長 691 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 52 ms
コンパイル使用メモリ 9,216 KB
実行使用メモリ 33,260 KB
最終ジャッジ日時 2026-04-08 08:34:51
合計ジャッジ時間 1,959 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 10
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #
raw source code

def f(n, s, a)
  latter_a = a.dup
  first_a = latter_a.shift(n/2)

  g = lambda{|i, sum, a, rr, h|
    h[sum] ||= []
    h[sum] << rr
    (i...a.size).each{|ii|
      g.(ii + 1, sum + a[ii], a, rr + [ii], h)
    }
    h
  }
  firsts = g.(0, 0, first_a, [], {})
  latters = g.(0, 0, latter_a, [], {})

  r = []
  firsts.each{|f_sum, f_a|
    if latters.key?(s - f_sum)
      l_a = latters[s - f_sum].map{|a| a.map{|i|first_a.size + i}}
      f_a.product(l_a).each{|a|
        r << a.flatten
      }
    end
  }
  # p [first_a, latter_a]
  # p [firsts, latters]
  r.map{|v|v.map(&:succ)}.sort
end

N, S = gets.split.map(&:to_i)
P = N.times.map{gets.to_i}

f(N, S, P).each{|a|
  puts a * " "
}
0