Cod sursa(job #1969338)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 18 aprilie 2017 13:45:01
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 1e7 + 5;
int A, B, C, n, s, ss, i, j, a[Nmax], b[Nmax], bucket[260];

int main()
{
    freopen("radixsort.in", "r", stdin);
    freopen("radixsort.out", "w", stdout);

    scanf("%d%d%d%d", &n, &A, &B, &C);
    a[1] = B;
    for(i=2; i<=n; ++i) a[i] = (1LL * A * a[i-1] + B) % C;

    for(j=0; j<32; j+=8)
    {
        for(i=0; i<256; ++i) bucket[i] = 0;
        for(i=1; i<=n; ++i) ++bucket[(a[i]>>j) & 255];

        s = 0;
        for(i=0; i<256; ++i)
        {
            ss = s;
            s += bucket[i];
            bucket[i] = ss;
        }

        for(i=1; i<=n; ++i)
            b[ ++bucket[(a[i]>>j) & 255] ] = a[i];

        for(i=1; i<=n; ++i) a[i] = b[i];
    }

    for(i=1; i<=n; i+=10) printf("%d ", a[i]);

    return 0;
}