#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
std::vector<std::pair<int,std::string>> cities;
void add_city(const std::string &name, int pop) {
if (cities.empty()) {
cities.emplace_back(pop, name);
}
else {
cities.emplace_back(pop + cities.back().first , name);
}
}
int total_population() {
return cities.empty() ? 0 : cities.back().first;
}
const std::string select_city() {
const int total = total_population();
const int pos = std::rand() % total;
const auto iter = std::lower_bound(begin(cities), end(cities), std::make_pair(pos, std::string()));
return iter->second;
}
int main() {
add_city("A", 50);
add_city("B", 500);
add_city("C", 1000);
for (unsigned i=0; i<15; ++i) {
const std::string city = select_city();
std::cout << city << ' ';
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGludCxzdGQ6OnN0cmluZz4+IGNpdGllczsKCnZvaWQgYWRkX2NpdHkoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIGludCBwb3ApIHsKCWlmIChjaXRpZXMuZW1wdHkoKSkgewoJCWNpdGllcy5lbXBsYWNlX2JhY2socG9wLCBuYW1lKTsKCX0KCWVsc2UgewoJCWNpdGllcy5lbXBsYWNlX2JhY2socG9wICsgY2l0aWVzLmJhY2soKS5maXJzdCAsIG5hbWUpOwoJfQp9CgppbnQgdG90YWxfcG9wdWxhdGlvbigpIHsKICAgIHJldHVybiBjaXRpZXMuZW1wdHkoKSA/IDAgOiBjaXRpZXMuYmFjaygpLmZpcnN0Owp9Cgpjb25zdCBzdGQ6OnN0cmluZyBzZWxlY3RfY2l0eSgpIHsKCWNvbnN0IGludCB0b3RhbCA9IHRvdGFsX3BvcHVsYXRpb24oKTsKCWNvbnN0IGludCBwb3MgPSBzdGQ6OnJhbmQoKSAlIHRvdGFsOwoJY29uc3QgYXV0byBpdGVyID0gc3RkOjpsb3dlcl9ib3VuZChiZWdpbihjaXRpZXMpLCBlbmQoY2l0aWVzKSwgc3RkOjptYWtlX3BhaXIocG9zLCBzdGQ6OnN0cmluZygpKSk7CglyZXR1cm4gaXRlci0+c2Vjb25kOwp9CgppbnQgbWFpbigpIHsKCQoJYWRkX2NpdHkoIkEiLCAgIDUwKTsKCWFkZF9jaXR5KCJCIiwgIDUwMCk7CglhZGRfY2l0eSgiQyIsICAxMDAwKTsKCQoJZm9yICh1bnNpZ25lZCBpPTA7IGk8MTU7ICsraSkgewoJCWNvbnN0IHN0ZDo6c3RyaW5nIGNpdHkgPSBzZWxlY3RfY2l0eSgpOwoJCXN0ZDo6Y291dCA8PCBjaXR5IDw8ICcgJzsKCX0KCQoJcmV0dXJuIDA7Cn0=