Cod sursa(job #2611238)

Utilizator maramihaliMara Mihali maramihali Data 6 mai 2020 16:31:04
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MAX = 10000001;
const int NB = 11;
const int B = 1 << NB;

int nr[B], poz[B], v[2][MAX];
int a, b, c, n, vmax, nc, cif, k;

int main()
{
    in >> n >> a >> b >> c;
    v[0][0] = vmax = b;
    for(int i = 1; i < n; i++)
    {
        v[0][i] = (1LL * a * v[0][i - 1] + 1LL * b) % c;
        vmax = max(vmax, v[0][i]);
    }
    nc = 0;
    while(vmax)
    {
        nc++;
        vmax /= B;
    }
    int p = 0;
    for(int k = 0; k < nc; k++)
    {
        for(int j = 0; j < B; j++)
        {
            nr[j] = 0;
        }
        for(int i = 0; i < n; i++)
        {
            int cif = (v[k % 2][i] >> p) & (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[k % 2][i] >> p) & (B - 1);
            v[1 - k % 2][poz[cif]++] = v[k % 2][i];
        }
        p += NB;
    }
    for(int i = 0; i < n; i += 10)
    {
        out << v[nc % 2][i] << " ";
    }
    return 0;
}