結果
問題 |
No.15 カタログショッピング
|
ユーザー |
|
提出日時 | 2025-05-31 16:50:11 |
言語 | D (dmd 2.109.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,058 bytes |
コンパイル時間 | 5,671 ms |
コンパイル使用メモリ | 207,244 KB |
実行使用メモリ | 12,780 KB |
最終ジャッジ日時 | 2025-05-31 16:50:23 |
合計ジャッジ時間 | 12,292 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 5 TLE * 1 -- * 4 |
ソースコード
module main; // https://yang33-kassa.jp/yukicoder/yukicoder015/ より import std; void main() { // 入力 long N, S; readln.chomp.formattedRead("%d %d", N, S); auto A = new long[](N); foreach (ref a; A) a = readln.chomp.to!long; // 答えの計算(半分全列挙、ビットDP) alias P = Tuple!(long, long); P[] V; long n1 = N / 2; foreach (i; 0 .. 1L << n1) { long sum = 0, bit = 0; foreach (j; 0 .. n1) { if (i & (1L << j)) { sum += A[j]; bit += 1L << (N - j); } } V ~= P(sum, bit); } V.sort; long n2 = N - n1; long[] ans; foreach (i; 0 .. 1L << n2) { long sum = 0, bit = 0; foreach (j; 0 .. n2) { if (i & (1 << j)) { sum += A[n1 + j]; bit += 1L << (N - n1 - j); } } foreach (v; V.filter!(a => a[0] == S - sum)) { if (v[0] + sum == S) ans ~= v[1] | bit; } } // 答えの出力 ans.sort!"a > b"; foreach (a; ans) { bool ok = false; foreach (k; 0 .. N) { if (a & (1L << (N - k))) { if (ok) write(" "); ok = true; write(k + 1); } } if (ok) writeln(); } }