#include <iostream>
#include <utility>
#include <vector>
#include <random>
#include <chrono>

//а щоб ви мені здорові були
std::default_random_engine generator( std::chrono::system_clock::now().time_since_epoch().count() );
  

int irregularRand( std::vector< std::pair< int, int > > &probabilities ) {
  int sum = 0;
  for( auto &p : probabilities ) {
  	sum += p.first;
  }
  std::uniform_int_distribution<int> distribution( 0, sum - 1);
  int rnd = distribution( generator );
  for( auto &p : probabilities )	{
  	rnd -= p.first;
  	if( rnd < 0 ) {
  	  return p.second;
  	}
  }
  return -1;//щось дуже сильно не так
}

int main() {
	std::vector< std::pair< int, int > > p
	  = { std::make_pair( 900, 1),
	      std::make_pair( 80,  2),
	      std::make_pair( 19,  3),
	      std::make_pair( 1,   4) };
	for( int i = 0; i < 1000 ; ++i )
	std::cout << irregularRand( p ) << " " ;
	return 0;
}