結果

問題 No.15 カタログショッピング
ユーザー letrangerjpletrangerjp
提出日時 2017-05-27 01:38:40
言語 Ruby
(3.3.0)
結果
AC  
実行時間 235 ms / 5,000 ms
コード長 691 bytes
コンパイル時間 44 ms
コンパイル使用メモリ 11,924 KB
実行使用メモリ 34,180 KB
最終ジャッジ日時 2023-10-20 00:20:07
合計ジャッジ時間 2,434 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 96 ms
16,104 KB
testcase_01 AC 93 ms
16,104 KB
testcase_02 AC 94 ms
16,104 KB
testcase_03 AC 91 ms
16,104 KB
testcase_04 AC 88 ms
16,100 KB
testcase_05 AC 235 ms
34,180 KB
testcase_06 AC 229 ms
34,176 KB
testcase_07 AC 229 ms
34,180 KB
testcase_08 AC 232 ms
34,176 KB
testcase_09 AC 233 ms
34,180 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

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