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

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

Up and Down

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

요약
1부터 N까지의 순열 중에서 주어진 up-sequence와 down-sequence(오른쪽에서 가장 가까운 더 큰/작은 값까지의 거리)를 만족하는 순열의 개수를 센다. N은 17 이하이다.
난이도

어려움10점 중 8점

유형
동적 계획법, 백트래킹, 조합론, 구현
정답자
아직 제출이 없습니다

문제

집합 {1, . . . , N}의 순열은 이 수들을 다시 나열한 것으로, 각 수는 정확히 한 번씩 나타난다. 순열의 up-sequence와 down-sequence를 다음과 같이 정의한다.

  • Up-sequence [u1, . . . , uN]: ui는 ai < ai+k가 성립하는 최소 양의 정수 k이다. 그러한 수가 없으면 ui = N + 1 − i이다.
  • Down-sequence [d1, . . . , dN]: di는 ai > ai+k가 성립하는 최소 양의 정수 k이다. 그러한 수가 없으면 di = N + 1 − i이다.

예를 들어 순열 [1, 4, 3, 2, 6, 5]가 주어지면 up-sequence는 [1, 3, 2, 1, 2, 1]이고 down-sequence는 [6, 1, 1, 3, 1, 1]이다.

일반적으로 같은 up-sequence와 down-sequence를 가지는 순열은 여러 개이다. 위 예에서 순열 [1, 5, 4, 2, 6, 3]과 [1, 5, 3, 2, 6, 4]도 같은 up-sequence와 down-sequence를 가진다.

주어진 up-sequence와 down-sequence에 대해 가능한 순열의 개수를 세어야 한다.

입력

입력은 여러 데이터 세트로 이루어진다.

각 세트는 세 줄로 구성된다. 첫째 줄에는 양의 정수 N (N ≤ 17)이 주어진다. 다음 두 줄에는 각각 N개의 정수가 주어지며, 앞 줄은 up-sequence, 뒤 줄은 down-sequence이다. 정수는 공백으로 구분된다.

입력은 0 하나만 있는 줄로 끝난다. 이 줄은 처리하지 않는다.

출력

각 세트에 대해 주어진 up-sequence와 down-sequence에 대응하는 순열의 개수를 한 줄에 출력한다.

예제1

  1. 예제 1

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