#include <array>
#include <iostream>
#include <vector>
#include <map>
#include <random>
int main()
{
// no hardware access on ideone
// std::random_device rd;
// std::mt19937 gen(rd());
std::mt19937 gen(time(NULL));
const std::array<double, 6> p = {10, 10, 20, 30, 20, 10};
std::discrete_distribution<> d(p.begin(), p.end());
std::map<int, int> m;
for(int n=0; n<10000; ++n) {
++m[d(gen)];
}
for(auto i = m.begin(); i!=m.end(); ++i) {
std::cout << i->first << " generated " << i->second << " times\n";
}
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxyYW5kb20+CiAKaW50IG1haW4oKQp7Ci8vIG5vIGhhcmR3YXJlIGFjY2VzcyBvbiBpZGVvbmUKLy8gICAgc3RkOjpyYW5kb21fZGV2aWNlIHJkOwovLyAgICBzdGQ6Om10MTk5MzcgZ2VuKHJkKCkpOwogICAgc3RkOjptdDE5OTM3IGdlbih0aW1lKE5VTEwpKTsKCiAgICBjb25zdCBzdGQ6OmFycmF5PGRvdWJsZSwgNj4gcCA9IHsxMCwgMTAsIDIwLCAzMCwgMjAsIDEwfTsKICAgIHN0ZDo6ZGlzY3JldGVfZGlzdHJpYnV0aW9uPD4gZChwLmJlZ2luKCksIHAuZW5kKCkpOwogICAgc3RkOjptYXA8aW50LCBpbnQ+IG07CiAgICBmb3IoaW50IG49MDsgbjwxMDAwMDsgKytuKSB7CiAgICAgICAgKyttW2QoZ2VuKV07CiAgICB9CiAgICBmb3IoYXV0byBpID0gbS5iZWdpbigpOyBpIT1tLmVuZCgpOyArK2kpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgaS0+Zmlyc3QgPDwgIiBnZW5lcmF0ZWQgIiA8PCBpLT5zZWNvbmQgPDwgIiB0aW1lc1xuIjsKICAgIH0KfQo=