아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

부분집합 합

시간 제한5초메모리 제한512 MB

요약
정수 n개가 주어질 때, 공집합이 아닌 모든 부분집합의 합 중 가장 작은 k개를 오름차순으로 출력한다.
난이도

어려움10점 중 8점

유형
힙, 정렬, 그리디, 조합론
정답자
아직 제출이 없습니다

문제

정수들의 중복집합 A={a1,a2,…,an}A = \{a_1, a_2, \dots, a_n\}가 주어진다. 공집합이 아닌 모든 부분집합의 합 중에서 가장 작은 kk개의 합을 오름차순으로 출력한다.

입력

첫째 줄에 정수 n,kn, k가 주어진다. (1≤n≤200000,1≤k≤min⁡{2n−1,200000}1 \leq n \leq 200000, 1 \leq k \leq \min\{2^n - 1, 200000\})

둘째 줄에 nn개의 정수 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다. (∣ai∣≤109|a_i| \leq 10^9)

출력

kk개의 정수를 한 줄에 하나씩 출력한다. 각 정수는 가장 작은 kk개의 합을 오름차순으로 나열한 것이다.

예제2

  1. 예제 1

    입력
    2 3
    -1 1
    
    예상 출력
    -1
    0
    1
    
  2. 예제 2

    입력
    3 7
    -1 0 1
    
    예상 출력
    -1
    -1
    0
    0
    0
    1
    1