#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;
}