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

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

부분 수열의 합

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

요약
숨겨진 양의 정수 수열의 모든 부분수열 합 분포가 주어질 때 원래 수열을 복원하고, 가능한 답 중 사전순으로 가장 작은 것을 출력한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디, 조합론, 수학
정답자
아직 제출이 없습니다

문제

Yuta는 합이 mm인 양의 정수 수열 A1,…,AnA_1, \ldots, A_n을 가지고 있다. AA의 각 부분 수열 SS에 대해, Yuta는 SS에 속한 원소들의 합을 계산했다.

그래서 Yuta는 00과 mm 사이의 2n2^n개의 정수를 가지게 되었다. 각 i∈[0,m]i \in [0, m]에 대해, BiB_i를 Yuta가 얻은 정수 ii의 개수라고 하자.

Yuta는 배열 BiB_i를 보여주며 A1,…,AnA_1, \ldots, A_n을 복원해 달라고 요청한다. 가능한 답이 여러 개라면, 사전순으로 가장 작은 수열을 찾아라.

입력

입력의 첫 번째 줄에는 두 정수 nn과 mm이 주어진다 (1≤n≤501 \leq n \leq 50, 1≤m≤1041 \leq m \leq 10^4).

두 번째 줄에는 m+1m + 1개의 정수 B0,…,BmB_0, \ldots, B_m이 주어진다 (0≤Bi≤2n0 \leq B_i \leq 2^n).

출력

nn개의 정수 A1,…,AnA_1, \ldots, A_n을 한 줄에 출력한다.

적어도 하나의 해가 존재함이 보장된다. 그리고 가능한 해가 여러 개라면, 사전순으로 가장 작은 해를 출력한다.

힌트

첫 번째 예제에서 AA는 [1,2][1, 2]이다. AA는 네 개의 부분 수열 [][], [1][1], [2][2], [1,2][1,2]를 가지며, 각각의 합은 00, 11, 22, 33이다. 따라서 B=[1,1,1,1]B = [1, 1, 1, 1]이다.

예제2

  1. 예제 1

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

    입력
    3 3
    1 3 3 1
    
    예상 출력
    1 1 1