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

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

몬스터 게임

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

요약
0부터 N-1까지의 순열인 몬스터의 강도를 짝별 대결 결과를 최대 25000번 질의해 알아낸다.
난이도

보통10점 중 7점

유형
정렬, 분할 정복, 이분 탐색, 구현
정답자
아직 제출이 없습니다

문제

새 비디오 게임이 출시되었다. 이 게임의 세계에는 0부터 N − 1까지 번호가 붙은 N마리의 몬스터가 있다. 각 몬스터는 강함이라는 정숫값을 가진다. 몬스터 i (0 ≤ i ≤ N − 1)의 강함은 Si이다. 몬스터들의 강함은 다음 조건을 만족한다.

  • 각 몬스터의 강함은 0 이상 N − 1 이하의 정수이다.
  • 서로 다른 두 몬스터의 강함은 같지 않다.

두 몬스터를 골라 서로 싸우게 할 수 있다. 몬스터 a와 몬스터 b (0 ≤ a ≤ N − 1, 0 ≤ b ≤ N − 1, a ≠ b)가 싸우면 결과는 다음과 같이 정해진다.

  • |Sa − Sb| = 1이면 강함이 더 작은 몬스터가 이긴다.
  • |Sa − Sb| > 1이면 강함이 더 큰 몬스터가 이긴다.

싸움의 결과와 관계없이 같은 몬스터를 원하는 만큼 여러 번 싸우게 할 수 있다.

처음에는 몬스터들의 강함을 모른다. 모든 몬스터의 강함을 알아내려고 한다. 이를 위해 몬스터를 최대 25 000번 싸우게 할 수 있고, 싸움의 결과를 알 수 있다. 또한 싸움 횟수를 최소화하려고 한다.

몬스터의 수가 주어질 때, 몬스터를 여러 번 싸우게 해서 모든 몬스터의 강함을 알아내는 프로그램을 작성하라.

입력

샘플 채점기는 표준 입력에서 다음 데이터를 읽는다.

N
S0 · · · SN−1

출력

프로그램이 성공적으로 종료되면 샘플 채점기는 다음 정보를 표준 출력에 쓴다 (따옴표는 명확성을 위해 붙인 것이다).

  • 프로그램이 정답으로 판정되면 함수 Query의 호출 횟수를 “Accepted: 100” 형태로 쓴다.
  • 프로그램이 오답으로 판정되면 그 종류를 “Wrong Answer [1]” 형태로 쓴다.

프로그램이 여러 종류의 오답으로 판정되면 샘플 채점기는 그중 하나만 보고한다.

제한

  • 4 ≤ N ≤ 1 000.
  • 0 ≤ Si ≤ N − 1 (0 ≤ i ≤ N − 1).
  • Si ≠ Sj (0 ≤ i < j ≤ N − 1).

예제1

  1. 예제 1

    입력
    4
    0 1 2 3
    
    예상 출력
    0 1 2 3