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

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

왕의 과제

면접 대비

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

요약
1부터 2n까지의 순열이 주어질 때, 인접한 쌍을 바꾸는 연산과 앞뒤 절반을 바꾸는 연산만으로 정렬하는 최소 횟수를 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 6점

유형
그래프, BFS, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

용감한 기사가 왕을 찾아와 공주와 결혼하게 해 달라고 청했다. 왕은 기사가 용감하다는 것은 알았지만, 똑똑한지도 알고 싶었다. 그래서 다음과 같은 과제를 내주었다.

1부터 2n2n까지의 수를 나열한 순열 pip_i가 있다. 다음 두 종류의 연산을 할 수 있다.

  1. p1p_1과 p2p_2, p3p_3과 p4p_4, ..., p2n−1p_{2n-1}과 p2np_{2n}을 교환한다.
  2. p1p_1과 pn+1p_{n+1}, p2p_2과 pn+2p_{n+2}, ..., pnp_{n}과 p2np_{2n}을 교환한다.

주어진 순열을 정렬하는 데 필요한 최소 연산 횟수를 구하는 것이 과제다.

기사는 사실 그렇게 똑똑하지는 않았지만 매력은 있었다. 그래서 공주가 여러분에게 왕의 과제를 해결하도록 도와달라고 부탁한다.

입력

첫째 줄에 정수 nn이 주어진다 (1≤n≤10001\le n\le 1000). 둘째 줄에 2n2n개의 정수 pip_i가 주어진다. 이는 1부터 2n2n까지의 수를 나열한 순열이다.

출력

순열을 정렬하는 데 필요한 최소 연산 횟수를 정수로 출력한다. 이 연산들로 순열을 정렬할 수 없다면 −1-1을 출력한다.

힌트

첫 번째 예에서 다음과 같이 세 번의 연산으로 순열을 정렬할 수 있다.

  1. 연산 1을 한다: 3,6,5,2,1,43, 6, 5, 2, 1, 4.
  2. 연산 2를 한다: 2,1,4,3,6,52, 1, 4, 3, 6, 5.
  3. 연산 1을 한다: 1,2,3,4,5,61, 2, 3, 4, 5, 6.

예제3

  1. 예제 1

    입력
    3
    6 3 2 5 4 1
    
    예상 출력
    3
    
  2. 예제 2

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

    입력
    4
    1 2 3 4 5 6 7 8
    
    예상 출력
    0