카드 더미 게임의 성공 확률
시간 제한1초메모리 제한128 MB
각각 n장인 카드 묶음 k개를 잘 섞어 n개의 더미로 나눈 뒤, 카드에 적힌 번호를 따라 이동하는 게임이 최대 m번의 재시작 안에 성공할 확률을 구해 소수점 r자리까지 출력한다.
문제
다음과 같은 게임을 생각한다. 부터 까지의 수가 하나씩 적힌 장의 카드가 벌 있다. 이 장의 카드를 잘 섞은 뒤 장씩 나누어 가로로 한 줄로 늘어놓아 개의 더미를 만든다. 이렇게 만든 개의 더미 중 왼쪽에서 번째 더미(장짜리)를 "더미 "라고 부른다.

게임은 더미 에서 시작한다. 더미의 맨 위 카드 한 장을 뽑고(뽑은 카드는 더미로 되돌리지 않는다), 그 카드에 적힌 수가 이면 이어서 더미 의 맨 위 카드 한 장을 뽑는다. 이렇게 방금 뽑은 카드에 적힌 수를 번호로 하는 더미의 맨 위 카드를 뽑는 일을 반복한다. 모든 더미의 카드가 없어지면 성공이다. 아직 카드가 남은 더미가 있는데도 다음에 카드를 뽑아야 할 더미가 비어 있으면 실패다.

도중에 실패한 경우에는 그대로 실패로 끝내거나, 남은 카드 더미를 그대로(더미 번호도 그대로) 둔 채 게임을 다시 시작할 수 있다. 게임을 다시 시작할 때 처음 뽑는 카드는 카드가 남아 있는 더미 중 가장 왼쪽 더미에서 뽑는다(그 더미의 맨 위 카드가 처음 뽑히는 카드가 된다). 다시 시작한 뒤에도 이전과 같은 방법으로 진행하여, 모든 더미의 카드가 없어지면 성공이고, 아직 카드가 남은 더미가 있는데도 다음에 뽑아야 할 더미가 비어 있으면 실패다.
이러한 재시작은 최대 번까지 할 수 있으며, 은 또는 이다. 즉 한 번도 재시작하지 않거나, 딱 한 번만 재시작한다. 게임 시작 전 섞는 방법에 따라 카드의 초기 배치가 달라진다. 당연히 초기 배치에 따라 재시작 없이 성공하기도 하고, 재시작하여 성공하기도 하며, 재시작해도 실패하기도 한다. 충분히 잘 섞었으므로 모든 초기 배치가 같은 확률로 나타난다고 가정하고, 재시작 번 이내에 성공할 확률 를 구하려 한다. 이 확률 를 소수로 나타내어 소수점 아래 번째 자리까지 구해 출력하는 프로그램을 작성하여라. 단 다음 조건을 만족하도록 출력한다.
- 충분히 큰 양의 정수 에 대해 가 정수가 되는 경우, 소수부는 도중부터 이 이어지지만 그 도 함께 출력한다. 예를 들어 인 경우 이면 0.37500을 출력하고, 이면 0.37을 출력한다. 인 경우도 마찬가지로, 예를 들어 이면 1.000을 출력한다.
- 예를 들어 0.150000…은 순환소수 0.1499999…로도 나타낼 수 있지만, 이러한 경우에는 앞의 표기(0.150000…)를 사용한다.
입력
첫 줄에 정수 , , , 가 이 순서대로 공백으로 구분되어 주어진다. , , 또는 , 이다.
출력
위에서 지정한 규칙대로 나타낸 를 한 줄에 출력하고, 그 뒤에 줄바꿈을 넣는다.