#include <cstdio>
#include <cctype>
#include <ctime>
#include <random>
int main()
{
std::mt19937 engine(time(0));
std::uniform_int_distribution<unsigned int> uint_dist01(0,1);
static const std::size_t coin_count = 10000000;
static const std::size_t rounds = 1000000;
std::vector<unsigned int> coin_list(coin_count,0);
for (std::size_t i = 0; i < coin_count; ++i)
{
coin_list[i] = uint_dist01(engine);
}
//
// If tails (0) randomly flip coin
// If heads (1) turn over coin
//
for (std::size_t r = 0; r < rounds; ++r)
{
std::size_t head_count = 0;
for (std::size_t i = 0; i < coin_count; ++i)
{
if (coin_list[i] = (coin_list[i] == 0) ? 1 : uint_dist01(engine))
{
head_count++;
}
}
printf("heads: %d (%10.5f%%) tails: %d (%10.5f%%)\n",
head_count, 100.0 * ((1.0 * head_count) / coin_count),
coin_count - head_count, 100.0 - 100.0 * ((1.0 * head_count) / coin_count));
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8cmFuZG9tPgoKCmludCBtYWluKCkKewogICBzdGQ6Om10MTk5MzcgZW5naW5lKHRpbWUoMCkpOwoKICAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248dW5zaWduZWQgaW50PiB1aW50X2Rpc3QwMSgwLDEpOwoKICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGNvaW5fY291bnQgPSAxMDAwMDAwMDsKICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IHJvdW5kcyAgICAgPSAxMDAwMDAwOwoKICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBjb2luX2xpc3QoY29pbl9jb3VudCwwKTsKCiAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBjb2luX2NvdW50OyArK2kpCiAgIHsKICAgICAgY29pbl9saXN0W2ldID0gdWludF9kaXN0MDEoZW5naW5lKTsKICAgfQoKICAgLy8KICAgLy8gSWYgdGFpbHMgKDApIHJhbmRvbWx5IGZsaXAgY29pbgogICAvLyBJZiBoZWFkcyAoMSkgdHVybiBvdmVyIGNvaW4KICAgLy8KCiAgIGZvciAoc3RkOjpzaXplX3QgciA9IDA7IHIgPCByb3VuZHM7ICsrcikKICAgewogICAgICBzdGQ6OnNpemVfdCBoZWFkX2NvdW50ID0gMDsKICAgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IGNvaW5fY291bnQ7ICsraSkKICAgICAgewogICAgICAgICBpZiAoY29pbl9saXN0W2ldID0gKGNvaW5fbGlzdFtpXSA9PSAwKSA/IDEgOiB1aW50X2Rpc3QwMShlbmdpbmUpKQogICAgICAgICB7CiAgICAgICAgICAgIGhlYWRfY291bnQrKzsKICAgICAgICAgfQogICAgICB9CgogICAgICBwcmludGYoImhlYWRzOiAlZCAoJTEwLjVmJSUpICB0YWlsczogJWQgKCUxMC41ZiUlKVxuIiwKICAgICAgICAgICAgIGhlYWRfY291bnQsICAgICAgICAgICAgICAgICAgICAgIDEwMC4wICogKCgxLjAgKiBoZWFkX2NvdW50KSAvIGNvaW5fY291bnQpLAogICAgICAgICAgICAgY29pbl9jb3VudCAtIGhlYWRfY291bnQsIDEwMC4wIC0gMTAwLjAgKiAoKDEuMCAqIGhlYWRfY291bnQpIC8gY29pbl9jb3VudCkpOwogICB9CgogICByZXR1cm4gMDsKfQ==