Cod sursa(job #1316704)

Utilizator tweetyMarinescu Ion tweety Data 14 ianuarie 2015 00:32:41
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <queue>

#define LIM_MAX 10000005

std::ifstream in("radixsort.in");
std::ofstream out("radixsort.out");
long N, A, B, C;
long Max;
long Exp;
long i, j;
long vect[LIM_MAX];
std::queue<long> myQueue[10];

void readData()
{
    in >> N >> A >> B >> C;
    in.close();

    Max = vect[1] = B;
    for (i = 2; i <= N; ++i)
    {
        vect[i] = (A * vect[i - 1] + B) % C;
        if (vect[i] > Max)
            Max = vect[i];
    }
}

void printData()
{
    for (i = 1; i <= N; i += 10)
        out << vect[i] << " ";

    out.close();
}

void radixSort()
{
    for (Exp = 1; Max / Exp > 0; Exp *= 10)
    {
        for (i = 1; i <= N; ++i)
            myQueue[(vect[i] / Exp) % 10].push(vect[i]);

        for (i = 0, j = 1; i <= 9; ++i)
            while (!myQueue[i].empty())
            {
                vect[j++] = myQueue[i].front();
                myQueue[i].pop();
            }
    }
}

int main()
{
    readData();
    radixSort();
    printData();

    return 0;
}