Cod sursa(job #2274835)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 2 noiembrie 2018 16:17:33
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;

ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
const int NMax = 10000000;
int X[NMax + 5];
int CMax,N,A,B,C;
vector <int> Bucket[10];
void Build()
{
    fin >> N >> A >> B >> C;
    X[1] = B;
    for(int i = 2; i <= N; ++i)
        {
        X[i] = (1LL *A * X[i-1] + B) % C;
        CMax = max(CMax, (int)log10(X[i]));
        }
}

void Print()
{
    for(int i = 1; i <= N; i+=10)
        fout << X[i] << " ";
    fout << "\n";
}

void Radix(int p)
{
    for(int i = 1; i <= N; ++i)
    {
        Bucket[X[i]/p%10].push_back(X[i]);
    }
    int k = 0;
    for(int i = 0; i <= 9; ++i)
    {
        for(int j = 0; j < (int)Bucket[i].size(); ++j)
            X[++k] = Bucket[i][j];
        Bucket[i].clear();
    }
}

int main()
{
    Build();
    for(int i = 0,p = 1; i <= CMax; ++i,p=p*10)
    {
        Radix(p);
    }
    Print();
    return 0;
}