Cod sursa(job #2608659)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 1 mai 2020 17:21:43
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
//
//  main.cpp
//  radixsort
//
//  Created by Eusebiu Rares on 01/05/2020.
//  Copyright © 2020 Eusebiu Rares. All rights reserved.
//

#include <iostream>
#include "fstream"

std::fstream in ("radixsort.in", std::ios::in) ;
std::fstream out ("radixsort.out", std::ios::out) ;

const int MV = 1e7 ;

int v[MV + 1] ;

namespace merge {

const int NC = 10 ;
const int BASE = 10 ;
int nr[NC] ;
int aux[MV + 1] ;

void sort(int vec[], int size, int power, int idx) {
	if (idx == NC + 1) {
		return ;
	}
	for (int i = 0 ; i < BASE ; ++ i) {
		nr[i] = 0 ;
	}
	for (int i = 1 ; i <= size ; ++ i) {
		nr[vec[i] / power % 10] ++ ;
	}
	for (int i = 1 ; i <= BASE ; ++ i) {
		nr[i] += nr[i - 1] ;
	}
	int help, ct(0) ;
	for (int i = 1 ; i <= size ; ++ i) {
		help = vec[i] / power % 10 - 1 ;
		if (help < 0) {
			help = 0 ;
			aux[++ ct] = v[i] ;
		} else aux[++ nr[help]] = v[i] ;
	}
	for (int i = 1 ; i <= size ; ++ i) {
		vec[i] = aux[i] ;
	}
	sort(vec, size, power * 10, idx + 1) ;
}

}

int main(int argc, const char * argv[]) {
	int n, A, B, C ; in >> n >> A >> B >> C ;
	v[1] = B ;
	for (int i = 2 ; i <= n ; ++ i) {
		v[i] = (A * v[i - 1] + B) % C ;
	}
	merge::sort(v, n, 1, 1) ;
	for (int i = 1 ; i <= n ; i = i + 10) {
		out << v[i] << ' ' ;
	}
}