สิ่งที่น่าพิศวงเป็นเกมบาสเกตบอลที่ผู้เล่นผลัดกันยิง มันถูกเล่นเป็นลำดับของการแข่งขันสำหรับผู้เล่นสองคนโดยแต่ละคนมีความเป็นไปได้ที่จะ "เตะออก" หนึ่งในผู้เล่นเหล่านั้น
สมมติว่าผู้เล่นมีA B C Dโอกาสในการยิงและจัดทำตะกร้า0.1 0.2 0.3 0.4ตามลำดับโดยไม่ขึ้นกับผู้เล่นอื่นในการแข่งขัน ผู้เล่นสองคนที่อยู่ด้านหน้าของแถวAและB"ต่อสู้" ตั้งแต่Aไปก่อนเขาเป็นผู้พิทักษ์ตกอยู่ในอันตรายจากการถูกกำจัดและBเป็นผู้โจมตีและไม่ตกอยู่ในอันตรายจากการกำจัดทันที Aถ่ายภาพก่อน ถ้าAทำให้Aสำเร็จป้องกันได้สำเร็จและไปที่ด้านหลังของบรรทัด B C D Aสายจะเปลี่ยนไป ถ้าAไม่ทำก็ให้Bยิง ถ้าBทำแล้วAจะออกและไปที่หลังของบรรทัดเพื่อให้กลายเป็นเส้นB C D Bถ้าไม่AหรือBทำให้เป็นกระบวนการซ้ำด้วยการAยิงอีกครั้งจนกระทั่งAหรือBทำตะกร้า
สมมติว่าบรรทัดเปลี่ยนเป็นB C D A( Aเคยป้องกันได้สำเร็จ) ตอนนี้BและC"ต่อสู้" ด้วยBการเป็นผู้พิทักษ์และCเป็นผู้โจมตี กระบวนการนี้ทำซ้ำจนกว่าจะเหลือเพียงคนเดียวเท่านั้น บุคคลนั้นเป็นผู้ชนะ
งานของคุณคือการคำนวณความน่าจะเป็นของผู้ชนะแต่ละคนที่ได้รับโอกาสที่จะทำตะกร้า
อินพุต :
รายการของตัวเลขเช่น0.1 0.2หรือ0.5 0.5 0.5 0.5ที่ซึ่งหมายเลขnเป็นโอกาสที่ผู้เล่นที่nจะทำตะกร้า คุณสามารถรับอินพุตนี้ในรูปแบบใดก็ได้ที่คุณต้องการรวมถึงเป็นพารามิเตอร์ในฟังก์ชัน
ผลผลิต :
รายชื่อหมายเลขที่หมายเลขnเป็นโอกาสที่ผู้เล่นที่nจะชนะเกม หมายเลขของคุณจะต้องแม่นยำอย่างน้อยสองตำแหน่งทศนิยมอย่างน้อย 90% ของเวลา ซึ่งหมายความว่าคุณสามารถใช้วิธีการจำลองตาม อย่างไรก็ตามหากรหัสของคุณไม่ได้เป็นแบบจำลอง ( รับประกันว่าจะคืนคำตอบที่ถูกต้องให้กับตำแหน่งทศนิยมอย่างน้อย 6 ตำแหน่ง) จากนั้นให้ลด 30% จากคะแนนของคุณ
ตัวอย่างระหว่าง0.5 0.5: เรียกผู้เล่นและA Bอนุญาตpเป็นความน่าจะเป็นของการชนะ Aมี2/3โอกาสประสบความสำเร็จในการป้องกัน (เนื่องจากมี1/2โอกาสที่จะAทำคะแนน, 1/4โอกาสที่AพลาดและBทำคะแนน, และ1/4โอกาสที่ทั้งพลาดและทำซ้ำ) หากAล้มเหลวในการปกป้องเขาจะถูกกระแทกและBชนะ หากปกป้องแล้วสายจะกลายเป็นA B Aเนื่องจากสถานการณ์เป็นสมมาตรความน่าจะเป็นของการชนะคือA (1 - p)เราได้รับ:
p = 2/3 * (1 - p) + 1/3 * 0. p = 2/5แก้ที่เราได้รับ เอาท์พุทควรจะเป็นหรือ2/5 3/50.4 0.6
ฉันไม่ดีพอที่มีความเป็นไปได้ที่จะทำตัวอย่างที่ซับซ้อนมากขึ้น
หากคุณต้องการกรณีทดสอบเพิ่มเติมนี่คือตัวอย่าง:
0.1 0.2 0.3 0.4 --> 0.01 0.12 0.25 0.62
0.99 0.99 --> 0.5 0.5 (it's not exact, but if you round to two decimal places, you get 0.5 and 0.5)