지역 ACM 장은 회의에 참석 한 사람들에게 상을 수여합니다. 당신은 당신이 프로그래밍 퍼즐을 해결하면 (하지만 그러나 승리의 증가 기회를 얻을 나는 항상 그 퍼즐을 해결 참조). 따라서 어떤 사람들에게는 1 개의 항목이 있고 다른 사람들에게는 2 개의 항목이 있습니다. 그러나 기다리십시오! 추첨 프로그램이 작동하는 방식은 누군가 퍼즐을 풀 때 다른 항목을 추가하는 것이 아닙니다. 대신, 사람이 가진 "생명"의 수를 추적하여 그 사람이 무작위 샘플링 알고리즘의 각 패스에서 선택되면 그 수가 줄어 듭니다. 따라서 다음과 같이 작동합니다.
Doorknob: 1. xnor: 2. Justin: 2. Alex: 1. Dennis: 2.
그런 다음 프로그램은 무작위로 중 하나를 선택 [Doorknob, xnor, Justin, Alex, Dennis]
하고 숫자를 줄입니다 (예 Justin
: 선택 ).
Doorknob: 1. xnor: 2. Justin: 1. Alex: 1. Dennis: 2.
그리고 반복합니다. 누군가의 "생명"수가 지나면 0
( Justin
다시 선택하자 ) 목록에서 제거됩니다.
Doorknob: 1. xnor: 2. Alex: 1. Dennis: 2.
이것은 한 사람이 남을 때까지 계속됩니다. 그 사람이 승자입니다.
이제 진짜 질문은, 내가 이겼을 확률은 얼마입니까?
두 가지 입력이 제공됩니다.
n
. 이것은 도전에 참여한 사람들의 수입니다k
. 이것은n
2 명의 생명 을 가진 사람들의 수입니다 . 이 번호는 항상 당신을 포함합니다.
따라서 제가 기능 p
을 가지고이라고 p(10, 5)
한다면, 총 10 명, 5 명은 1 명, 5 명 (2 명)은 2 명에게 상을받을 확률입니다.
당신은 정확하게 또는 십진법으로 이길 확률을 출력해야합니다. 어쨌든, 답은 4를 포함하여 정확한까지이어야합니다 번째 소수점 이후 소수의 장소. 해당 숫자로 반올림하는지 여부는 귀하에게 달려 있습니다.
귀하의 솔루션은 확률 이 높은 4 번째 소수에 대한 답변을 출력하는 무작위 솔루션 일 수 있습니다 . 사용하는 내장 RNG가 실제로 임의적이라고 가정하고 최소 90 % 확률로 정답을 출력해야합니다.
또한 n, k <= 1000
궁금한 것보다 큰 테스트 사례를 제공했지만 코드는에만 작동해야합니다 .
테스트 사례
참고 :이 중 일부는 일반 공식입니다.
n, k | output
----------+---------
1, 1 | 1
2, 2 | 0.5
2, 1 | 0.75
3, 1 | 11/18 = 0.611111111
1000, 1 | 0.007485470860550352
4, 3 | 0.3052662037037037
k, k | 1/k
n, 1 | (EulerGamma + PolyGamma[1 + n])/n (* Mathematica code *)
| (γ + ψ(1 + n))/n
10, 6 | 0.14424629234373537
300, 100 | 0.007871966408910648
500, 200 | 0.004218184180294532
1000, 500 | 0.0018008560286627948
---------------------------------- Extra (not needed to be a valid answer)
5000, 601 | 0.0009518052922680399
5000, 901 | 0.0007632938197806958
다른 몇 가지 확인 사항 p(n, 1) * n
은 다음과 같이 수행하십시오.
n | output
------+---------
1 | 1
2 | 1.5
3 | 1.8333333333333335
10 | 2.928968253968254
100 | 5.1873775176396215
-------------------------- Extra (not needed to be a valid answer)
100000| 12.090146129863305
k
하나만 생각합니다 )