Yerel ACM bölümüm toplantılara gelen insanlara kapı ödülleri veriyor. Eğer programlama bulmacayı çözmek eğer (ama bununla birlikte, kazanan artmış şans ben hep bulmacayı çözmek). Bu nedenle, bazı kişiler 1, diğerleri 2 girişe sahiptir. Ama bekleyin! Çekiliş programının çalışması, birisi bulmacayı çözdüğünde başka bir giriş eklemek değildir. Bunun yerine, bir kişinin sahip olduğu "yaşam" sayısını izler ve bu kişi rastgele örnekleme algoritmasının her geçişinde seçilirse, azalır. Yani şu şekilde çalışır:
Doorknob: 1. xnor: 2. Justin: 2. Alex: 1. Dennis: 2.
Sonra program rastgele birini seçer [Doorknob, xnor, Justin, Alex, Dennis]
, sayıyı azaltır (seçtiğini söyle Justin
):
Doorknob: 1. xnor: 2. Justin: 1. Alex: 1. Dennis: 2.
Ve tekrarlar. Birinin "can" sayısı ( tekrar 0
seçelim Justin
) giderse , listeden kaldırılır:
Doorknob: 1. xnor: 2. Alex: 1. Dennis: 2.
Bu bir kişi kalana kadar devam eder; o kişi kazanır.
Şimdi asıl soru şu ki, kazanma ihtimalim neydi?
Size iki giriş verilecektir:
n
. Bu meydan okumaya giren kişi sayısık
. Bu,n
2 hayatı olanların sayısıdır . Bu numara her zaman sizi içerir.
Ben bir işlevi vardı Yani eğer p
ve denilen p(10, 5)
5 (siz de dahil) 2 hayat var oysa ki, sadece 1 ömrüne sahip 5 tanesi 10 kişilik toplam vardır ödül kazanma olasılığı olurdu.
Kazanma olasılığını tam olarak veya ondalık olarak vermeniz beklenir. Her halükarda, cevaplar 4 dahil doğru adede kadar ve olmalıdır inci ondalık noktasından sonra ondalık haneye. Bu rakama yuvarlanıp dönmediğiniz size kalmış.
Çözümün 4 cevabını verir randomize çözüm olabilir inci ile bir ondalık basamağa yüksek olasılık . Kullandığınız yerleşik RNG'nin gerçekten rastgele olduğunu varsayabilirsiniz ve en az% 90 olasılıkla doğru cevabı vermelidir.
Ayrıca, n, k <= 1000
merak edenler için daha büyük test senaryoları sağlamış olsam da, kodunuzun sadece çalışması gerekir .
Test Durumları
Not: Bunlardan bazıları genel formüllerdir.
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
Başka birkaç kontrol için p(n, 1) * n
aşağıdakileri yapı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