Knockout là một trò chơi bóng rổ, nơi người chơi thay phiên nhau bắn súng. Nó được chơi như một chuỗi các cuộc thi hai người chơi, mỗi cuộc thi có khả năng "hạ gục" một trong những người chơi đó.
Giả sử người chơi A B C Dvà cơ hội bắn và tạo rổ của họ 0.1 0.2 0.3 0.4tương ứng, độc lập với người chơi khác trong cuộc thi. Hai người chơi ở đầu hàng, Avà B, "chiến đấu". Kể từ khi Ađi trước, anh ta là người phòng thủ , có nguy cơ bị loại, và Blà kẻ tấn công , và không có nguy cơ bị loại ngay lập tức. Abắn trước. Nếu Alàm cho nó, Ađã bảo vệ thành công, và đi đến phía sau của dòng. Dòng sẽ thay đổi thành B C D A. Nếu Akhông làm được thì Bbắn. Nếu Blàm cho nó, sau đó Alà ra và Bđi đến phía sau của dòng, vì vậy dòng trở thành C D B. Nếu khôngAcũng không Blàm cho nó, quá trình lặp lại, với Aviệc chụp lại, cho đến khi Ahoặc Blàm một cái giỏ.
Giả sử dòng thay đổi thành B C D A( Ađã bảo vệ thành công). Bây giờ, Bvà C"chiến đấu", với Btư cách là người phòng thủ, và Clà kẻ tấn công. Quá trình này lặp lại cho đến khi chỉ còn một người. Người đó là người chiến thắng.
Nhiệm vụ của bạn là tính toán xác suất của mỗi người chiến thắng khi có cơ hội họ sẽ tạo ra một rổ.
Đầu vào :
Một danh sách các số, chẳng hạn như 0.1 0.2hoặc 0.5 0.5 0.5 0.5, trong đó số thứ n là cơ hội mà người chơi thứ n sẽ tạo ra một rổ. Bạn có thể lấy đầu vào này ở bất kỳ định dạng nào bạn thích, bao gồm làm tham số cho hàm.
Đầu ra :
Một danh sách các số, trong đó số thứ n là cơ hội mà người chơi thứ n sẽ giành chiến thắng trong trò chơi. Số của bạn phải chính xác đến ít nhất hai chữ số thập phân ít nhất 90% thời gian. Điều này có nghĩa là bạn có thể sử dụng một cách tiếp cận dựa trên mô phỏng. Tuy nhiên, nếu mã của bạn không dựa trên mô phỏng (nó được đảm bảo trả về câu trả lời đúng cho ít nhất 6 chữ số thập phân) thì lấy đi 30% từ điểm của bạn.
Ví dụ giữa 0.5 0.5: Gọi người chơi Avà B. Hãy plà xác suất của A chiến thắng. Acó 2/3cơ hội bảo vệ thành công (vì có 1/2cơ hội Aghi bàn, 1/4cơ hội Abỏ lỡ và Bghi bàn, và 1/4cơ hội cả bỏ lỡ và quá trình lặp lại). Nếu Akhông phòng thủ, anh ta bị loại và Bchiến thắng. Nếu Abảo vệ, sau đó dòng trở thành B A. Vì tình huống là đối xứng, nên xác suất Achiến thắng là (1 - p). Chúng tôi nhận được:
p = 2/3 * (1 - p) + 1/3 * 0. Giải quyết, chúng tôi nhận được p = 2/5. Đầu ra nên 2/5 3/5hoặc 0.4 0.6.
Tôi không đủ tốt với xác suất để làm các ví dụ phức tạp hơn.
Nếu bạn cần thêm trường hợp thử nghiệm, đây là một vài:
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)