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

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

One-sequence 수열

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

요약
0에서 시작해 매 단계 1 또는 -1만큼 움직이는 길이 n의 수열 중 합이 S가 되는 가장 사전순으로 앞선 수열을 찾는다. 없으면 NIE를 출력한다.
난이도

보통10점 중 6점

유형
그리디, 구현, 수학, 누적 합
정답자
아직 제출이 없습니다

문제

연속한 두 원소의 차가 항상 11 또는 −1-1 이고 첫 번째 원소가 00 인 정수 수열을 one-sequence 라고 부른다. 정확히 말하면 [a1,a2,…,an][a_1, a_2, \ldots, a_n] 이 one-sequence 라는 것은 다음을 만족한다는 뜻이다.

  • 1≤k<n1 \le k < n 인 모든 kk 에 대해 ∣ak−ak+1∣=1|a_k - a_{k+1}| = 1 이고,
  • a1=0a_1 = 0 이다.

수열의 길이 nn 과 원소들의 합 SS 가 주어진다. 길이가 nn 이고 합이 SS 인 one-sequence 는 여러 개일 수 있으므로, 그중 사전순으로 가장 작은 수열을 출력해야 한다. 두 수열을 앞에서부터 원소끼리 비교했을 때 처음으로 달라지는 위치의 값이 더 작은 쪽이 사전순으로 앞선다(a1a_1 은 항상 00 이므로 사실상 a2a_2 부터 비교가 결정된다). 길이가 nn 이고 합이 SS 인 one-sequence 가 존재하지 않으면 그 사실을 알려야 한다.

입력

첫째 줄에 수열의 길이 nn 이 주어진다(1≤n≤100001 \le n \le 10000). 둘째 줄에 원소들의 합 SS 가 주어진다(∣S∣≤50000000|S| \le 50000000).

출력

길이가 nn 이고 원소들의 합이 SS 인 one-sequence 가 존재하면, 사전순으로 가장 작은 수열의 원소를 한 줄에 하나씩 출력한다(kk 번째 원소를 kk 번째 줄에). 존재하지 않으면 NIE 를 출력한다(폴란드어로 "아니오"라는 뜻이다).

예제4

  1. 예제 1

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

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

    입력
    1
    5
    
    예상 출력
    NIE
    
  4. 예제 4

    입력
    2
    1
    
    예상 출력
    0
    1