Cod sursa(job #2201575)

Utilizator daniel.vbVasile Daniel daniel.vb Data 5 mai 2018 10:39:01
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>




int n,m,a,b,c;
int v[10000005],x[65600],aux[10000005];




int main()
{
    int i,j,c1;
    unsigned long long crt;
    FILE *f,*g;

    f=fopen("radixsort.in","r");
    g=fopen("radixsort.out","w");

    fscanf(f,"%d%d%d%d",&n,&a,&b,&c);

    v[1]=b;
    m=1;
    crt=b;
    for(i=2;i<=n;i++)
    {
        crt=(crt*a+b)%c;
        v[i]=crt;
    }
    c1=1<<16;


//    for(i=1;i<=n;i++)
  //      printf("%d ",v[i]);


    for(i=1;i<=n;i++)
         x[v[i]%c1]++;
    for(i=1;i<=c1;i++)
        x[i]+=x[i-1];
    for(i=n;i>=1;i--)
    {
        j=v[i]%c1;
        aux[x[j]]=v[i];
        x[j]--;
    }

    for(i=0;i<=c1;i++)
        x[i]=0;

    for(i=1;i<=n;i++)
         x[aux[i]/c1]++;
    for(i=1;i<=c1;i++)
        x[i]+=x[i-1];
    for(i=n;i>=1;i--)
    {
        j=aux[i]/c1;
        v[x[j]]=aux[i];
        x[j]--;
    }

    for(i=1;i<=n;i+=10)
        fprintf(g,"%d ",v[i]);

    fclose(f);
    fclose(g);
}