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