結果
| 問題 | No.15 カタログショッピング | 
| コンテスト | |
| ユーザー |  convexineq | 
| 提出日時 | 2020-11-24 06:12:45 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 212 ms / 5,000 ms | 
| コード長 | 964 bytes | 
| コンパイル時間 | 254 ms | 
| コンパイル使用メモリ | 81,636 KB | 
| 実行使用メモリ | 80,936 KB | 
| 最終ジャッジ日時 | 2024-07-23 18:23:23 | 
| 合計ジャッジ時間 | 2,087 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 10 | 
ソースコード
# coding: utf-8
# Your code here!
import sys
readline = sys.stdin.readline
read = sys.stdin.read
#a,b,c = map(int,readline().split())
def f(r):
    n = len(r)
    v = [0]
    for i in r:
        v += [vi+i for vi in v]
    
    v = [(v[i],i) for i in range(1<<n)]
    return v
n,s,*p = map(int,open(0).read().split())
a = f(p[:n//2])
b = f(p[n//2:])
#print(b)
a.sort(key=lambda x:x[0])
b.sort(key=lambda x:x[0])
from bisect import bisect_left,bisect_right
la = n//2
lb = n-la
ans = []
for bi,i in b:
    if s < bi: break
    l = bisect_left(a,(s-bi,-1))    
    r = bisect_right(a,(s-bi,1<<31))    
    for aj,j in a[l:r]:
        res = []
        v = 0
        for k in range(la):
            v += 1
            if j>>k&1:
                res.append(v)
        for k in range(lb):
            v += 1
            if i>>k&1:
                res.append(v)
        ans.append(res)                
        #print(aj,j,bi,i)
ans.sort()
for i in ans: print(*i)
            
            
            
        