結果
| 問題 | No.15 カタログショッピング |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-31 16:50:11 |
| 言語 | D (dmd 2.112.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,058 bytes |
| 記録 | |
| コンパイル時間 | 3,631 ms |
| コンパイル使用メモリ | 196,352 KB |
| 実行使用メモリ | 5,888 KB |
| 最終ジャッジ日時 | 2026-07-11 05:18:52 |
| 合計ジャッジ時間 | 31,623 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 TLE * 5 |
コンパイルメッセージ
/home/linuxbrew/.linuxbrew/opt/dmd/include/dlang/dmd/core/checkedint.d(814): Warning: cannot inline function `core.checkedint.mulu!().mulu`
ulong mulu()(ulong x, uint y, ref bool overflow)
^
ソースコード
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();
}
}