Cod sursa(job #1117210)

Utilizator TibixbAndrei Tiberiu Tibixb Data 23 februarie 2014 11:50:51
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define DIM 10000003
using namespace std;

long long v[DIM], w[DIM], f[10];

long long t, n, maxim, i, j, a, b, c, z;

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

int main() {
    fin>>n>>a>>b>>c;
    v[1] = b;
    maxim = b;
    for (i=2;i<=n;i++) {
        v[i] = (int)((1LL*a*v[i-1] + b) % c);
        if (v[i] > maxim)
            maxim = v[i];
    }

    t = 0;
    while (maxim) {
        t++;
        maxim/=10;
    }

    long long z = 1;
    for (i=1;i<=t;i++) {
        for (j=0;j<=9;j++)
            f[j] = 0;
        for (j=1;j<=n;j++)
            f[ v[j]/z%10  ] ++;
        for (j=1;j<=9;j++)
            f[j] += f[j-1];
        for (j=n;j>=1;j--) {
            w[  f[ v[j]/z%10  ]   ] = v[j];
            f[ v[j]/z%10  ] --;
        }
        for (j=1;j<=n;j++)
            v[j] = w[j];

        z*=10;
    }
    for(i=1;i<=n;i+=10)
        fout<<v[i]<<" ";
    return 0;
}