Cod sursa(job #1955257)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 5 aprilie 2017 21:27:37
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
#define BAZA 10000
using namespace std;
int v[10000001],aux[10000001],f[BAZA];
int main()
{
    FILE *fin=fopen ("radixsort.in","r");
    FILE *fout=fopen ("radixsort.out","w");
    int n,a,b,c,i,cf0;
    long long nr;
    fscanf (fin,"%d%d%d%d",&n,&a,&b,&c);
    v[1]=b;
    for (i=2;i<=n;i++)
        v[i]=((long long)v[i-1]*a+b)%c;
    // trebuie sa il sortez pe v
    cf0=0;
    nr=BAZA;
    while (cf0<n){
        // cat timp nu au toate numerele 0 in fata
        //printf ("%lld ",nr);
        cf0=0;
        for (i=0;i<=BAZA-1;i++)
            f[i]=0;
        for (i=1;i<=n;i++){
            f[(v[i]/(nr/BAZA))%BAZA]++;
            if (v[i]/(nr/BAZA)<BAZA)
                cf0++;
        }
        for (i=1;i<=BAZA-1;i++)
            f[i]+=f[i-1];
        for (i=n;i>0;i--){
            aux[f[(v[i]/(nr/BAZA))%BAZA]]=v[i];
            f[(v[i]/(nr/BAZA))%BAZA]--;
        }
        for (i=1;i<=n;i++){
            v[i]=aux[i];
            aux[i]=0;
        }
        nr=nr*BAZA;
    }
    for (i=1;i<=n;i+=10)
        fprintf (fout,"%d ",v[i]);
    return 0;
}