Cod sursa(job #1116829)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 22 februarie 2014 20:47:03
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

using namespace std;

const int d[] = {0, 8, 16, 24};

int v[10000005], vv[10000005];

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--) {
            vv[fr[(v[i]>>d[p]) & mask]]=v[i];
            fr[(v[i]>>d[p]) & mask]--;
        }
        for (i=1;i<=n;i++)
            v[i]=vv[i];
    }
    for(i=1;i<=n;i+=10)
        g<<v[i]<<" ";
    return 0;
}