Cod sursa(job #1317915)

Utilizator mariusn01Marius Nicoli mariusn01 Data 15 ianuarie 2015 13:12:46
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;

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

int v[10000010], w[10000010];
int n, i, A, C, B, m, p;
int f[10];

inline int cif(int x, int p) {
    return x/p%10;
}

int main() {
    fin>>n>>A>>B>>C;
    v[1] = B;
    for (i=2;i<=n;i++) {
        v[i] = (A * v[i-1] + B) % C;
        if (v[i] > m)
            m = v[i];
    }

    p = 1;
    while (p <= m) {
        // cifra curenta a lui v[i] este v[i]/p%10;

        for (i=0;i<=9;i++)
            f[i] = 0;

        for (i=1;i<=n;i++)
            f[ cif(v[i], p) ] ++;

        for (i=1;i<=9;i++)
            f[i] += f[i-1];

        for (i=n;i>=1;i--) {
            w[  f[ cif(v[i], p) ] --  ] = v[i];
        }

        for (i=1;i<=n;i++)
            v[i] = w[i];

        p*=10;
    }

    for (i=1;i<=n;i+=10)
        fout<<v[i]<<" ";

    return 0;
}