Cod sursa(job #1464549)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 23 iulie 2015 20:33:00
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
#include<cstring>
using namespace std;
int v[10000010],v0[10000010],nr[10];
int main(){
    freopen("radixsort.in","r",stdin);
    freopen("radixsort.out","w",stdout);
    int n,a,b,c,i,maxim,t;
    scanf("%d%d%d%d",&n,&a,&b,&c);
    v[1]=maxim=b;
    for(i=2;i<=n;i++){
        v[i]=(a*v[i-1]+b)%c;
        if(v[i]>maxim)
            maxim=v[i];
    }
    for(t=1;maxim/t>0;t*=10){
        memset(nr,0,sizeof(nr));
        for(i=1;i<=n;i++)
            nr[(v[i]/t)%10]++;
        for(i=1;i<=9;i++)
            nr[i]+=nr[i-1];
        for(i=n;i>=1;i--){
            v0[nr[(v[i]/t)%10]]=v[i];
            nr[(v[i]/t)%10]--;
        }
        for(i=1;i<=n;i++)
            v[i]=v0[i];
    }
    for(i=1;i<=n;i+=10)
        printf("%d ",v[i]);
    return 0;
}