#include <iostream>
using namespace std;
enum things {
Goat = 0,
Car = 1
};
#define IGNORANT_MONTY 1
int rand(int max) {
float RM = RAND_MAX;
return rand() / RM * max;
}
int main() {
srand(time(0));
int num = 10000;
int change = 0;
int stay = 0;
int discarded = 0;
while(stay + change < num) {
things doors[3];
for(auto & t : doors) {
t = Goat;
}
doors[rand(3)] = Car;
int you = rand(3);
int monty;
#if IGNORANT_MONTY
monty = (rand(2) + you + 1) % 3;
if(doors[monty] == Car)
discarded++;
else
#else
for(int i = 0; i < 3; ++i) {
if( you == i )
continue;
if( doors[i] == Goat )
continue;
monty = i;
}
#endif
if(doors[you] == Car)
stay++;
else if(doors[you] == Goat)
change++;
}
cout << "stay: " << stay << endl << "change: " << change << endl << "discarded: " << discarded << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmVudW0gdGhpbmdzIHsKCUdvYXQgPSAwLAoJQ2FyICA9IDEKfTsKCiNkZWZpbmUgSUdOT1JBTlRfTU9OVFkgMQoKaW50IHJhbmQoaW50IG1heCkgewoJZmxvYXQgUk0gPSBSQU5EX01BWDsKCXJldHVybiByYW5kKCkgLyBSTSAqIG1heDsKfQoKaW50IG1haW4oKSB7CglzcmFuZCh0aW1lKDApKTsKCWludCBudW0gPSAxMDAwMDsKCQoJaW50IGNoYW5nZSA9IDA7CglpbnQgc3RheSA9IDA7CglpbnQgZGlzY2FyZGVkID0gMDsKCQoJd2hpbGUoc3RheSArIGNoYW5nZSA8IG51bSkgewoJCXRoaW5ncyBkb29yc1szXTsJCgkJZm9yKGF1dG8gJiB0IDogZG9vcnMpIHsKCQkJdCA9IEdvYXQ7CgkJfQoJCWRvb3JzW3JhbmQoMyldID0gQ2FyOwoJCQoJCWludCB5b3UgPSByYW5kKDMpOwoJCWludCBtb250eTsKCQkKCSNpZiBJR05PUkFOVF9NT05UWQoJCW1vbnR5ID0gKHJhbmQoMikgKyB5b3UgKyAxKSAlIDM7CgkJCgkJaWYoZG9vcnNbbW9udHldID09IENhcikKCQkJZGlzY2FyZGVkKys7CgkJZWxzZSAKCSNlbHNlCgkJZm9yKGludCBpID0gMDsgaSA8IDM7ICsraSkgewoJCQlpZiggeW91ID09IGkgKQoJCQkJY29udGludWU7CgkJCWlmKCBkb29yc1tpXSA9PSBHb2F0ICkKCQkJCWNvbnRpbnVlOwoJCQltb250eSA9IGk7CgkJfQoJI2VuZGlmCgkJCgkJaWYoZG9vcnNbeW91XSA9PSBDYXIpCgkJCXN0YXkrKzsKCQllbHNlIGlmKGRvb3JzW3lvdV0gPT0gR29hdCkKCQkJY2hhbmdlKys7Cgl9CgkKCWNvdXQgPDwgInN0YXk6ICIgPDwgc3RheSA8PCBlbmRsIDw8ICJjaGFuZ2U6ICIgPDwgY2hhbmdlIDw8IGVuZGwgPDwgImRpc2NhcmRlZDogIiA8PCBkaXNjYXJkZWQgPDwgZW5kbDsKfQ==