순열의 번호 매기기

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

요약
1부터 n까지의 순열이 주어지면 사전식 순서로 나열했을 때 1부터 시작하는 순위를 구합니다.
난이도

보통10점 중 4점

유형
조합론, 수학
정답자
아직 제출이 없습니다

문제

11부터 nn까지의 정수를 한 번씩 사용해 만든 순열 P=(p1,p2,…,pn)P=(p_1, p_2, \ldots, p_n)이 있다. 길이가 nn인 순열을 모두 사전순으로 늘어놓았을 때 PP가 몇 번째에 오는지를 d(P)d(P)라고 하자. 맨 앞에 오는 (1,2,…,n)(1, 2, \ldots, n)의 번호는 11이다.

길이가 nn인 순열을 전부 만들어 보지 않고 d(P)d(P)를 구하는 프로그램을 작성하시오. nn은 5050 이하이다.

n=4n=4일 때 사전순으로 늘어놓은 순열과 그 번호는 아래 그림과 같다.

n이 4일 때 사전순으로 늘어놓은 순열과 번호

P=(2,3,4,1)P=(2,3,4,1)이면 d(P)=10d(P)=10이고, P=(4,2,1,3)P=(4,2,1,3)이면 d(P)=21d(P)=21이다.

입력

입력은 여러 줄로 이루어진다. 각 줄에는 질의가 하나씩 (n,(p1,p2,…,pn))(n,(p_1,p_2,\ldots,p_n)) 형식으로 주어지고, 줄 안에 공백은 없다. 마지막 줄에는 −1-1만 있고, 이 줄을 만나면 입력이 끝난다. 질의는 하나 이상 주어진다.

출력

질의마다 구한 d(P)d(P)를 입력에 주어진 순서대로 한 줄에 출력한다. 값과 값 사이는 쉼표 하나로 구분하고, 쉼표 앞뒤에 공백을 넣지 않는다.

예제2

  1. 예제 1

    입력
    (4,(3,2,1,4))
    (5,(3,5,1,2,4))
    -1
    
    예상 출력
    15,67
    
  2. 예제 2

    입력
    (4,(2,3,4,1))
    (4,(4,2,1,3))
    -1
    
    예상 출력
    10,21