Pagini recente » Cod sursa (job #329026) | Cod sursa (job #324948) | Cod sursa (job #323747) | Cod sursa (job #324947) | Cod sursa (job #2608655)
//
// 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[50] ;
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) ;
}
}
#ifdef DEBUG
#define in std::cin
#define out std::cout
#endif
int main(int argc, const char * argv[]) {
#ifndef DEBUG
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 ;
}
#else
int n ; in >> n ;
for (int i = 1 ; i <= n ; ++ i) {
in >> v[i] ;
}
#endif
#ifndef DEBUG
merge::sort(v, n, 1, 1) ;
for (int i = 1 ; i <= n ; i = i * 10) {
out << v[i] << ' ' ;
}
#else
merge::sort(v, n, 1, 1) ;
for (int i = 1 ; i <= n ; ++ i) {
out << v[i] << ' ' ;
}
#endif
}
/* 6
19 38 12 47 110 67
*/