Cod sursa(job #2608677)

Utilizator rapidu36Victor Manz rapidu36 Data 1 mai 2020 17:45:18
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std;

const int N = 1e7;
const int NB = 11;
const int B = 1 << NB;
const int NC = 3;

ifstream in("radixsort.in");
ofstream out("radixsort.out");

int n, a[2][N], nr[B], poz[B];

void citire()
{
    int aa, b, c;
    in >> n >> aa >> b >> c;
    a[0][0] = b;
    for (int i = 1; i < n; i++)
    {
        a[0][i] = ((long long)aa * a[0][i-1] + b) % c;
    }
    in.close();
}

void rad_sort()
{
    for (int k = 0; k < NC; k++)
    {
        int ic = k & 1;
        int ia = 1 - ic;
        int nsh = k * NB;
        for (int j = 0; j < B; j++)
        {
            nr[j] = 0;
        }
        for (int i = 0; i < n; i++)
        {
            nr[(a[ic][i] >> nsh) & (B - 1)]++;
        }
        poz[0] = 0;
        for (int j = 1; j < B; j++)
        {
            poz[j] = poz[j-1] + nr[j-1];
        }
        for (int i = 0; i < n; i++)
        {
            int cif = (a[ic][i] >> nsh) & (B - 1);
            a[ia][poz[cif]++] = a[ic][i];
        }
    }
}

void afisare()
{
    int ic = NC & 1;
    for (int i = 0; i < n; i += 10)
    {
        out << a[ic][i] << " ";
    }
}

int main()
{
    citire();
    rad_sort();
    afisare();
    return 0;
}