Cod sursa(job #1219440)

Utilizator mihaimusatMihai Musat mihaimusat Data 14 august 2014 10:57:49
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define NMAX  10000005
const int d[] = {0, 8, 16, 24};

using namespace std;

int v[NMAX], w[NMAX];

int fr[256];

int n, a, b, c, i, p;

int main() {

    ifstream f("radixsort.in");
    ofstream g("radixsort.out");
    f>>n>>a>>b>>c;
    v[1]=b;
    for(i=2;i<=n;i++) {
        v[i] =(int)((1LL*a*v[i-1]+b)%c);
    }

    int mask = 255;

    for (p = 0; p<=3; p++) {
        for (i=0;i<=255;i++)
            fr[i]=0;
        for (i=1;i<=n;i++)
            fr[(v[i]>>d[p]) & mask]++;
        for (i=1;i<=255;i++)
            fr[i]+=fr[i-1];
        for (i=n;i>=1;i--) {
            w[fr[(v[i]>>d[p]) & mask]]=v[i];
            fr[(v[i]>>d[p]) & mask]--;
        }
        for (i=1;i<=n;i++)
            v[i]=w[i];
    }
    for(i=1;i<=n;i+=10)
        g<<v[i]<<" ";
    return 0;
}