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

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

난수 생성기

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

요약
1부터 N까지의 값 중 아직 안 나온 개수와 한 번만 나온 개수를 바탕으로, 모든 값이 두 번 이상 나올 때까지 필요한 추가 추첨 횟수의 기댓값을 구한다.
난이도

어려움10점 중 8점

유형
확률, 동적 계획법, 수학, 구현
정답자
아직 제출이 없습니다

문제

1부터 NN까지의 정수를 균등한 확률로 반환하는 난수 생성기가 있다. 생성기가 수를 반환할 때마다 친구가 그 수를 하나씩 기록한다. 11부터 NN까지의 모든 수가 적어도 두 번씩 기록되는 즉시 친구가 생성기를 멈춘다.

생성기는 이미 KK개의 수를 반환했고, ii번째로 반환된 수는 AiA_i이다. 친구가 아직 멈추지 않았으므로 11부터 NN까지의 수 중 적어도 하나는 아직 두 번 반환되지 않았다.

친구가 멈출 때까지 추가로 요청해야 하는 횟수의 기댓값을 구하라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다 (1≤T≤100,0001 \le T \le 100{,}000).

각 테스트 케이스의 첫째 줄에는 두 정수 NN과 KK가 주어진다 (1≤N≤3,0001 \le N \le 3{,}000, 0≤K≤100,0000 \le K \le 100{,}000). NN은 반환될 수의 범위이고 KK는 이미 요청한 수의 개수이다.

각 테스트 케이스의 둘째 줄에는 KK개의 정수 A1,A2,…,AKA_1, A_2, \dots, A_K가 주어진다 (1≤Ai≤N1 \le A_i \le N). K=0K = 0인 경우 이 줄은 비어 있다.

아직 모든 수가 두 번씩 반환되지는 않았다고 가정한다. 모든 테스트 케이스에 대한 KK의 합은 100,000100{,}000을 넘지 않는다.

출력

각 테스트 케이스마다 친구가 멈출 때까지 추가로 요청해야 하는 횟수의 기댓값을 한 줄에 출력한다.

절대 오차 또는 상대 오차가 10−610^{-6} 이하이면 정답으로 인정한다.

힌트

앞으로 필요한 기댓값은 지금까지 각 수가 몇 번 등장했는지가 아니라, 아직 한 번도 등장하지 않은 수의 개수와 정확히 한 번 등장한 수의 개수에만 의존한다.

N=1N = 1이고 아직 아무 수도 보지 못한 경우 항상 22를 추가로 요청해야 한다. N=1N = 1이고 11이 이미 한 번 등장한 경우 답은 11이다.

예제3

  1. 예제 1

    입력
    4
    1 0
    
    1 1
    1
    2 10
    2 2 2 2 2 2 2 2 2 2
    3 0
    
    
    예상 출력
    2.000000000
    1.000000000
    4.000000000
    9.638888889
    
  2. 예제 2

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

    입력
    1
    2 0
    
    
    예상 출력
    5.500000000