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 D
và cơ hội bắn và tạo rổ của họ 0.1 0.2 0.3 0.4
tươ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, A
và 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à B
là kẻ tấn công , và không có nguy cơ bị loại ngay lập tức. A
bắn trước. Nếu A
là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 A
không làm được thì B
bắn. Nếu B
làm cho nó, sau đó A
là 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ôngA
cũng không B
làm cho nó, quá trình lặp lại, với A
việc chụp lại, cho đến khi A
hoặc B
là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ờ, B
và C
"chiến đấu", với B
tư cách là người phòng thủ, và C
là 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.2
hoặ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 A
và B
. Hãy p
là xác suất của A chiến thắng. A
có 2/3
cơ hội bảo vệ thành công (vì có 1/2
cơ hội A
ghi bàn, 1/4
cơ hội A
bỏ lỡ và B
ghi bàn, và 1/4
cơ hội cả bỏ lỡ và quá trình lặp lại). Nếu A
không phòng thủ, anh ta bị loại và B
chiến thắng. Nếu A
bả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 A
chiế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/5
hoặ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)