Cod sursa(job #2611273)

Utilizator StanCatalinStanCatalin StanCatalin Data 6 mai 2020 16:58:06
Problema Radix Sort Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

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

const int dim = 10000005;

int n,v[dim],nr[(1<<9) + 6],poz[(1<<9) + 6],aux[dim];

int main()
{
    long long int a,b,c;
    in >> n >> a >> b >> c;
    v[0] = b;
    int maxi = b;
    for (int i=1; i<n; i++)
    {
        v[i] = (a * v[i-1] + b)%c;
        maxi = max(maxi , v[i]);
    }
    int NB = 9;
    int B = (1<<NB);
    int nc = 0,nb;
    int cif;
    while (maxi != 0)
    {
        nc++;
        maxi /= B;
    }
    for (int k=0; k<nc; k++)
    {
        nb = k * NB;
        memset(nr,0 ,sizeof(nr));
        for (int i=0; i<n; i++)
        {
            cif = ((v[i]>>nb)&(B-1));
            nr[cif]++;
        }
        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++)
        {
            cif = ((v[i] >>nb)&(B-1));
            aux[poz[cif]++] = v[i];
        }
        for (int i=0; i<n; i++)
        {
            v[i] = aux[i];
        }
    }
    for (int i=0; i<n; i += 10) out << v[i] << " ";
    return 0;
}