मेरा स्थानीय एसीएम अध्याय बैठकों में आने वाले लोगों को डोर पुरस्कार प्रदान करता है। यदि आप प्रोग्रामिंग पहेली को हल करते हैं, तो आपको जीतने का एक बढ़ा मौका मिलता है, हालांकि (लेकिन मैं हमेशा उस पहेली को हल करता हूं )। इस प्रकार, कुछ लोगों के पास 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 जीवन हैं।
आपसे अपेक्षा की जाती है कि आप जीतने की संभावना को बिल्कुल या एक दशमलव के रूप में आउटपुट करें। किसी भी दर पर, उत्तर दशमलव बिंदु के बाद 4 वें दशमलव स्थान तक सही और समाहित होना चाहिए । आप उस अंक के लिए राउंड करते हैं या नहीं, यह आपके ऊपर है।
आपका समाधान एक यादृच्छिक समाधान हो सकता है जो उच्च संभावना के साथ 4 वें दशमलव स्थान पर उत्तर को आउटपुट करता है । आप मान सकते हैं कि आपके द्वारा उपयोग किया गया आरएनजी में निर्मित वास्तव में यादृच्छिक है, और इसे कम से कम 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
है कि यह एक से दूर है)