비트
시간 제한2초메모리 제한512 MB
N개의 비트를 매 연산마다 정렬한 뒤 K개의 난수 인덱스로 뒤집을 때, 각 시작 상태의 0 개수마다 모두 1이 될 때까지의 기댓값을 구한다.
문제
0 또는 1을 저장하는 변수를 비트라고 하자. 개의 비트를 다음 규칙으로 조작한다. 아래 세 단계를 모두 마치면 조작 한 번이 끝난다.
- 0인 비트를 앞에, 1인 비트를 뒤에 두도록 비트를 일렬로 늘어놓는다. 즉 비내림차순으로 정렬한다.
- 1 이상 이하의 정수를 개 무작위로 뽑는다. 각 정수는 서로 독립으로 뽑고, 1부터 까지 각 정수가 뽑힐 확률은 모두 같으며, 같은 정수를 두 번 이상 뽑을 수도 있다.
- 뽑은 개의 정수를 뽑은 순서대로 처리한다. 정수가 이면 번째 비트를 토글한다. 즉 0이면 1로, 1이면 0으로 바꾼다.
비트가 0, 1, 0이고 인 경우를 보자. 먼저 정렬해서 0, 0, 1을 만든다. 뽑은 정수가 순서대로 1, 3, 1이라면 첫 번째 정수 1로 비트가 1, 0, 1이 되고, 두 번째 정수 3으로 1, 0, 0이 되며, 세 번째 정수 1로 0, 0, 0이 된다.
모든 조작이 정렬로 시작하므로 비트가 어떤 순서로 놓였는지는 중요하지 않고 0인 비트의 개수만 중요하다. 조작을 마친 뒤 모든 비트가 1이면 조작을 멈춘다. 0인 비트가 개일 때 모든 비트를 1로 만들기까지 필요한 조작 횟수의 기댓값을 구하라.
입력
첫째 줄에 비트의 개수 과 한 번의 조작에서 뽑는 정수의 개수 가 공백으로 구분되어 주어진다. 는 홀수이다. (, )
출력
개의 줄에 답을 출력한다. 번째 줄에는 0인 비트가 개일 때 모든 비트를 1로 만들기까지 필요한 조작 횟수의 기댓값을 출력한다. 기댓값을 기약분수 로 나타냈을 때, 을 출력한다. 은 을 법으로 하는 의 곱셈 역원이다. 주어지는 모든 입력에 대해 답이 존재한다.