Cod sursa(job #2611222)

Utilizator StanCatalinStanCatalin StanCatalin Data 6 mai 2020 16:22:40
Problema Radix Sort Scor 0
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;

long long int n,a,b,c,v[dim],nr[1035],poz[1035],aux[dim];

int main()
{
    in >> n >> a >> b >> c;
    v[0] = b;
    long long int maxi = b;
    for (int i=1; i<n; i++)
    {
        v[i] = (a * v[i-1] + b) % c;
        maxi = max(maxi , v[i]);
    }
    long long int B = (1<<7);
    long long int nb = 7;
    int nc = 0;
    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++)
        {
            int 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++)
        {
            int 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;
}