Cod sursa(job #1405553)

Utilizator heracleRadu Muntean heracle Data 29 martie 2015 13:11:00
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>

FILE* in=fopen("radixsort.in","r");
FILE* out=fopen("radixsort.out","w");

int n,a,b,c;

const int Q=10000007;

int v[Q];

int srt[Q];

int p[16][Q];

int main()
{
    fscanf(in,"%d%d%d%d",&n,&a,&b,&c);

    v[1]=b;
    srt[1]=1;

    for(int i=2; i<=n; i++)
    {
        v[i]=(a*v[i-1]+b)%c;

        srt[i]=i;
    }

    int go;

    for(int k=0; k<32; k+=4)
    {
        for(int i=0; i<16; i++)
            p[i][0]=0;

        for(int i=1; i<=n; i++)
        {
            go=((v[srt[i]])>>k)&15;
            p[go][++p[go][0]]=srt[i];
        }
        srt[0]=0;

        for(int f=0; f<16; f++)
        {
            for(int i=1; i<=p[f][0]; i++)
            {
                srt[++srt[0]]=p[f][i];
            }
        }
    }

    for(int i=1; i<=n; i+=10)
    {
        fprintf(out,"%d ",v[srt[i]]);
    }



    return 0;
}