Cod sursa(job #1115866)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 22 februarie 2014 09:59:26
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<cstdio>
int n,a,b,c,m,i,j,v[10001000],x[10001000],fr[1000],vmax,nmax,nr,s[1000],p;
FILE *f,*g;
int main(){
    f=fopen("radixsort.in","r");
    g=fopen("radixsort.out","w");
    fscanf(f,"%d%d%d%d",&n,&a,&b,&c);
    v[1]=b;
    vmax=b;
    for(j=2;j<=n;j++){
        v[j]=int((long long)(a*v[j-1]+b)%c);
        if(v[j]>vmax)
            vmax=v[j];
    }
    nmax=vmax;
    while(vmax>0){
        nr++;
        vmax/=10;
    }
    p=1;
    for(i=1;i<=nr;i++){
        for(j=0;j<=9;j++){
            fr[j]=0;
        }
        p*=10;
        for(j=1;j<=n;j++){
            a=v[j];
            fr[(v[j]%p)/(p/10)]++;
        }
        for(j=0;j<=9;j++){
            s[j]=s[j-1]+fr[j];
        }
        for(j=n;j>=1;j--){
            a=(v[j]%p)/(p/10);
            x[s[a]]=v[j];
            s[a]--;
        }
        for(j=1;j<=n;j++){
            v[j]=x[j];
        }
    }
    for(i=1;i<=n;i+=10){
        fprintf(g,"%d ",v[i]);
    }



    fclose(f);
    fclose(g);
    return 0;
}