#include <iostream>
#include <vector>
struct Box
{
int goldBalls;
int silverBalls;
};
int main()
{
// Коробки с шарами
std::vector<Box> boxes;
boxes.push_back({ 2, 0 });
boxes.push_back({ 1, 1 });
//boxes.push_back({ 0, 2 }); // 3-ю коробку для простоты отбрасываем
// Тянем шары
const int N = 1000000;
int winCount = 0;
for (int i = 0; i < N; i++)
{
//rechose: // Убогая 2/3-интерпретация II
// Выбор случайной коробки
Box box = boxes[std::rand() % boxes.size()];
rechose: // Боярская 1/2-интерпретация I
// 1) Тянем первый шар из коробки
bool pick1_is_gold = std::rand() % (box.goldBalls + box.silverBalls) < box.goldBalls;
if (!pick1_is_gold)
{
goto rechose; // Вселенная схлопывается => выбираем шар(I)/коробку(II) ещё раз
}
box.goldBalls--; // Вынули золотой шар
// 2) Рандомно тянем второй шар из той же коробки
bool pick2_is_gold = std::rand() % (box.goldBalls + box.silverBalls) < box.goldBalls;
// Увеличиваем счётчик, если оба шара оказались золотыми
winCount += pick1_is_gold && pick2_is_gold;
}
std::cout << "Answer = " << (double)winCount / N << "\n";
}