#include <iostream>
#include <map>
#include <random>
#include <iterator>
#include <ctime>
int main( )
{
// std::random_device rd; // no access to /dev/urandom on ideone
// std::mt19937 gen(rd());
std:: mt19937 gen( std:: time ( NULL ) ) ;
double weights[ ] =
{ 0 , // do not generate the number 0
1 , // number 1 at base probability
2 , // number 2 twice as often
0.2 , // number 3 at 1/5th probability
0.2 , // number 4 at 1/5th probability
1 , 1 , 1 , 1 , 1 , 1 } ; // 5..10 at base probability
// std::discrete_distribution<> d(std::begin(weights), std::end(weights)); // ideone's compiler is outdated
std:: discrete_distribution <> d( weights, weights + sizeof weights/ sizeof weights[ 0 ] ) ;
std:: map < int , int > m;
for ( int n= 0 ; n< 10000 ; ++ n) {
++ m[ d( gen) ] ;
}
// for(auto p : m) { // ideone's compiler is outdated
for ( auto i = m.begin ( ) ; i! = m.end ( ) ; ++ i) {
// std::cout << p.first << " generated " << p.second << " times\n";
std:: cout << i- > first << " generated " << i- > second << " times\n " ;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxjdGltZT4KaW50IG1haW4oKQp7Ci8vICAgIHN0ZDo6cmFuZG9tX2RldmljZSByZDsgLy8gbm8gYWNjZXNzIHRvIC9kZXYvdXJhbmRvbSBvbiBpZGVvbmUKLy8gICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsgCiAgICBzdGQ6Om10MTk5MzcgZ2VuKHN0ZDo6dGltZShOVUxMKSk7CiAgICBkb3VibGUgd2VpZ2h0c1tdID0KICAgICAgICAgICAgezAsIC8vIGRvIG5vdCBnZW5lcmF0ZSB0aGUgbnVtYmVyIDAKICAgICAgICAgICAgIDEsIC8vIG51bWJlciAxIGF0IGJhc2UgcHJvYmFiaWxpdHkKICAgICAgICAgICAgIDIsIC8vIG51bWJlciAyIHR3aWNlIGFzIG9mdGVuCiAgICAgICAgICAgICAwLjIsIC8vIG51bWJlciAzIGF0IDEvNXRoIHByb2JhYmlsaXR5CiAgICAgICAgICAgICAwLjIsIC8vIG51bWJlciA0IGF0IDEvNXRoIHByb2JhYmlsaXR5CiAgICAgICAgICAgICAxLCAxLCAxLCAxLCAxLCAxfTsgLy8gNS4uMTAgYXQgYmFzZSBwcm9iYWJpbGl0eQoKLy8gICAgIHN0ZDo6ZGlzY3JldGVfZGlzdHJpYnV0aW9uPD4gZChzdGQ6OmJlZ2luKHdlaWdodHMpLCBzdGQ6OmVuZCh3ZWlnaHRzKSk7IC8vIGlkZW9uZSdzIGNvbXBpbGVyIGlzIG91dGRhdGVkCiAgICAgc3RkOjpkaXNjcmV0ZV9kaXN0cmlidXRpb248PiBkKHdlaWdodHMsIHdlaWdodHMgKyBzaXplb2Ygd2VpZ2h0cy9zaXplb2Ygd2VpZ2h0c1swXSk7CgogICAgc3RkOjptYXA8aW50LCBpbnQ+IG07CiAgICBmb3IoaW50IG49MDsgbjwxMDAwMDsgKytuKSB7CiAgICAgICAgKyttW2QoZ2VuKV07CiAgICB9Ci8vICAgIGZvcihhdXRvIHAgOiBtKSB7IC8vIGlkZW9uZSdzIGNvbXBpbGVyIGlzIG91dGRhdGVkCiAgICBmb3IoYXV0byBpID0gbS5iZWdpbigpOyBpIT1tLmVuZCgpOyArK2kpIHsKLy8gICAgICAgIHN0ZDo6Y291dCA8PCBwLmZpcnN0IDw8ICIgZ2VuZXJhdGVkICIgPDwgcC5zZWNvbmQgPDwgIiB0aW1lc1xuIjsKICAgICAgICBzdGQ6OmNvdXQgPDwgaS0+Zmlyc3QgPDwgIiBnZW5lcmF0ZWQgIiA8PCBpLT5zZWNvbmQgPDwgIiB0aW1lc1xuIjsKICAgIH0KfQ==