結果
問題 |
No.15 カタログショッピング
|
ユーザー |
|
提出日時 | 2025-06-09 18:19:37 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 67 ms / 5,000 ms |
コード長 | 854 bytes |
コンパイル時間 | 404 ms |
コンパイル使用メモリ | 82,816 KB |
実行使用メモリ | 87,168 KB |
最終ジャッジ日時 | 2025-06-09 18:19:39 |
合計ジャッジ時間 | 1,749 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
import sys from collections import defaultdict read = sys.stdin.buffer.read N,S,*P=map(int,read().split()) def get_subset_sums(P): n=len(P) dp=[0]*(1<<n) for mask in range(1,1<<n): last_bit=mask&(-mask) i=last_bit.bit_length()-1 dp[mask]=dp[mask^last_bit]+P[i] return dp dpl=get_subset_sums(P[:N//2]) dpr=get_subset_sums(P[N//2:]) dpr_memo = defaultdict(list) for maskr, sumr in enumerate(dpr): dpr_memo[sumr].append(maskr) def decode(s, t): n=N//2 nums=[] for i in range(n): if s>>i&1: nums.append(i+1) for j in range(N-n): if t>>j&1: nums.append(n+j+1) return tuple(nums) solutions=[] for maskl, suml in enumerate(dpl): for maskr in dpr_memo[S-suml]: solutions.append(decode(maskl, maskr)) for solution in sorted(solutions): print(*solution)